生活随笔
收集整理的這篇文章主要介紹了
测试多个线程调用同一静态方法(无静态变量)时是否有线程安全问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
思路:
使用兩個線程調用同一靜態方法(該靜態方法不引用靜態變量)、第一個線程被阻塞的時間大于第二個線程被阻塞的時間,若第一個線程與第二個線程的輸出結果相同,則兩個線程調用同一靜態方法存在線程安全問題,若第一個線程于第二個線程的輸出結果不同,則兩個線程調用同一靜態方法不存在線程安全問題;
package?com.shawearn.test;????public?class?TestThreadSafe?{??????public?static?void?main(String[]?args)?{????????????????????new?Thread(new?Runnable()?{????????????????@Override??????????????public?void?run()?{??????????????????????????????????test(1,?1,?3000L);??????????????}????????????}).start();????????????????????new?Thread(new?Runnable()?{????????????????@Override??????????????public?void?run()?{??????????????????????????????????test(2,?2,?1000L);??????????????}????????????}).start();????????}????????????public?static?void?test(int?num,?int?callCount,?long?sleepTime)?{??????????long?nowTime?=?System.currentTimeMillis();??????????int?result?=?0;??????????try?{??????????????result?=?num;??????????????Thread.sleep(sleepTime);??????????}?catch?(InterruptedException?e)?{??????????????????????????e.printStackTrace();??????????}??????????System.out.println("["?+?nowTime?+?"]?第?"?+?callCount?+?"?次調用?result?:?"?+?result);??????}??}?? 第一次運行結果:
[1476725904385]?第?2?次調用?result?:?2??[1476725904385]?第?1?次調用?result?:?1?? 第二次運行結果:
[1476725950310]?第?2?次調用?result?:?2??[1476725950310]?第?1?次調用?result?:?1?? 第三次運行結果:
[1476725998017]?第?2?次調用?result?:?2??[1476725998017]?第?1?次調用?result?:?1?? 實驗結論:
兩個線程調用同一靜態方法(該靜態方法不引用靜態變量)不存在線程安全問題;
?
?
版權聲明:本博文為作者個人原創,轉載請聲明文章來源 http://blog.csdn.net/shawearn1027
轉載于:https://www.cnblogs.com/toSeeMyDream/p/8249999.html
總結
以上是生活随笔為你收集整理的测试多个线程调用同一静态方法(无静态变量)时是否有线程安全问题的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。