测试多个线程调用同一静态方法(无静态变量)时是否有线程安全问题

来源:互联网 发布:spss 23 for mac 破解 编辑:程序博客网 时间:2024/06/07 01:29

思路:

使用两个线程调用同一静态方法(该静态方法不引用静态变量)、第一个线程被阻塞的时间大于第二个线程被阻塞的时间,若第一个线程与第二个线程的输出结果相同,则两个线程调用同一静态方法存在线程安全问题,若第一个线程于第二个线程的输出结果不同,则两个线程调用同一静态方法不存在线程安全问题;

package com.shawearn.test;/** * 测试多个线程调用同一静态方法(无静态变量)时是否有线程安全问题; *  * @author Shawearn * */public class TestThreadSafe {public static void main(String[] args) {// 创建第一个线程,该线程调用 test 方法时会被阻塞 3000 毫秒;new Thread(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubtest(1, 1, 3000L);}}).start();// 创建第二个线程,该线程在调用 test 方法时会被阻塞 1000 毫秒;new Thread(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubtest(2, 2, 1000L);}}).start();}/** * 测试方法; *  * @param num 传入的数字; * @param callCount 当前方法被调用的次数; * @param sleepTime 当前方法运行时的阻塞时间,单位为毫秒; */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) {// TODO Auto-generated catch blocke.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

实验结论:

两个线程调用同一静态方法(该静态方法不引用静态变量)不存在线程安全问题;



0 0
原创粉丝点击