`
Jeff88
  • 浏览: 4742 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

线程安全类一:java中satic关键字的作用的小测试

 
阅读更多
public class StaticTest {

	public static void main(String[] args) {
		/*
		 *1,创建一个MyRunnable,new两个Thread      一个对象,执行了两次线程操作,方法
		 *	执行结果:
		 *  执行线程1线程类的run方法开始
		 *	执行线程1线程类的run方法开始,count=100
		 *	执行线程2线程类的run方法开始
		 *	执行线程2线程类的run方法开始,count=200
		 *
		*/

		/*MyRunnable myRunnable1 = new MyRunnable() ;
		Thread th1 = new Thread(myRunnable1, "线程1");
//		调用堆中的同一个对象myRunnable1,再次执行线程操作
		Thread th2 = new Thread(myRunnable1, "线程2");
		th1.start();
		th2.start();*/
		
		/*
		 * 2,创建两个MyRunnable,一个Thread去实现  一个线程执行两个对象
	     *执行线程1线程类的run方法开始
	     *执行线程1线程类的run方法开始,count=100
	     *执行线程2线程类的run方法开始
	     *执行线程2线程类的run方法开始,count=100
		 * 
		 * */
		/*MyRunnable myRunnable1 = new MyRunnable() ;
		MyRunnable myRunnable2 = new MyRunnable() ;
		Thread th1 = new Thread(myRunnable1, "线程1");
		th1.start();
		th1 = new Thread(myRunnable2, "线程2");
		th1.start();*/
		
		
		/*
		 * 3,创建一个对象,两个线程去跑
		 * 
		 * */
		MyRunnableStatic myRunnable1 = new MyRunnableStatic() ;
		Thread th1 = new Thread(myRunnable1, "线程1");
//		调用堆中的同一个对象myRunnable1,再次执行线程操作
		Thread th2 = new Thread(myRunnable1, "线程2");
		th1.start();
		th2.start();
		 
		/*
		 * 4,创建两个MyRunnable,两个个Thread去实现
		 * 执行结果:
		 *  执行线程2线程类的run方法开始
		 *	执行线程2线程类的run方法开始,count=100
		 *	执行线程1线程类的run方法开始
		 *	执行线程1线程类的run方法开始,count=200
		 * 
		 * */
		/*MyRunnableStatic myRunnable1 = new MyRunnableStatic() ;
		MyRunnableStatic myRunnable2 = new MyRunnableStatic() ;
		Thread th1 = new Thread(myRunnable1, "线程1");
		th1.start();
		th1 = new Thread(myRunnable2, "线程2");
		th1.start();*/
		
		
		
		
	}

}

class MyRunnable implements Runnable{
	
//	不加static关键字,默认是对象共享变量,每个线程独立操作变量
	private int count = 0 ;

	@Override
	public void run() {

		System.out.println("执行"+Thread.currentThread().getName()+"线程类的run方法开始");
		for (int i = 0; i < 100; i ++) {
			count ++ ;
		}
		System.out.println("执行"+Thread.currentThread().getName()+"线程类的run方法开始,count="+count);
	}
	
	
}



class MyRunnableStatic implements Runnable{
	
//	static关键字,多个对象操作同一个变量,
	private static int count = 0 ;
	
	@Override
	public void run() {
		
		System.out.println("执行"+Thread.currentThread().getName()+"线程类的run方法开始");
		for (int i = 0; i < 100; i ++) {
			count ++ ;
		}
		System.out.println("执行"+Thread.currentThread().getName()+"线程类的run方法开始,count="+count);
	}
	
	
}


 

 

静态变量被所有的对象所共享

 

在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有

 

,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响

 

 

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

Global site tag (gtag.js) - Google Analytics