关闭

验证多线程的经典代码,以及volatile关键字的使用

标签: 多线程
48人阅读 评论(0) 收藏 举报
public class VariableShareTest {
	public static volatile int count =0;                                     //结果证明加上volatile关键字并不能保证变量在线程之间绝对的一致性。

	
	public static int doTest(){
		Thread[] threads = new Thread[20];
		for(int i=0;i<20;i++){
			threads[i] = new Thread(new Runnable(){
				@Override
				public void run(){                               //给每个线程委派一个耗时较长的工作加大线程间竞争的可能性
					for(int i=0;i<10000;i++){
						count++;
					}
				}
			});
			threads[i].start();
		}

		return count;
	}
	
	public static void main(String args[]){
		System.out.println(String.valueOf(doTest()));
	while(Thread.activeCount()>1)                                    //如果不加这一段代码,函数可能提前返回,得到的结果将会小很多。
			Thread.yield();
System.out.println(String.valueOf(VariableShareTest.count));//两个结果的不一致证明在方法中创建的对象并不会随着方法的结束而死亡。<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">还是需要通过加锁了解决线程间的共享问题</span>

   
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:50次
    • 积分:10
    • 等级:
    • 排名:千里之外
    • 原创:1篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章存档