1700450319
1700450320
int value=1000;
1700450321
1700450322
//循环次数,防止出现无限循环造成死机情况
1700450323
1700450324
int loops=0;
1700450325
1700450326
//主线程组,用于估计活动线程数
1700450327
1700450328
ThreadGroup tg=Thread.currentThread().getThreadGroup();
1700450329
1700450330
while(loops++<value){
1700450331
1700450332
//共享资源清零
1700450333
1700450334
UnsafeThread ut=new UnsafeThread();
1700450335
1700450336
for(int i=0;i<value;i++){
1700450337
1700450338
new Thread(ut).start();
1700450339
1700450340
}
1700450341
1700450342
//先等15毫秒,等待活动线程数量成为1
1700450343
1700450344
do{
1700450345
1700450346
Thread.sleep(15);
1700450347
1700450348
}while(tg.activeCount()!=1);
1700450349
1700450350
//检查实际值与理论值是否一致
1700450351
1700450352
if(ut.getCount()!=value){
1700450353
1700450354
//出现线程不安全的情况
1700450355
1700450356
System.out.println(“循环到第”+loops+“遍,出现线程不安全情况”);
1700450357
1700450358
System.out.println(“此时,count=”+ut.getCount());
1700450359
1700450360
System.exit(0);
1700450361
1700450362
}
1700450363
1700450364
}
1700450365
1700450366
}
1700450367
1700450368
这是一段设计很巧妙的程序,要让volatile变量“出点丑”还是需要花点功夫的。此段程序的运行逻辑如下:
[
上一页 ]
[ :1.700450319e+09 ]
[
下一页 ]