思路:
使用两个线程调用同一静态方法(该静态方法不引用静态变量)、第一个线程被阻塞的时间大于第二个线程被阻塞的时间,若第一个线程与第二个线程的输出结果相同,则两个线程调用同一静态方法存在线程安全问题,若第一个线程于第二个线程的输出结果不同,则两个线程调用同一静态方法不存在线程安全问题;
package com.shawearn.test;
/**
* 测试多个线程调用同一静态方法(无静态变量)时是否有线程安全问题;
*
* @author Shawearn
*
*/
public class TestThreadSafe {
public static void main(String[] args) {
// 创建第一个线程,该线程调用 test 方法时会被阻塞 3000 毫秒;
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
test(1, 1, 3000L);
}
}).start();
// 创建第二个线程,该线程在调用 test 方法时会被阻塞 1000 毫秒;
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
test(2, 2, 1000L);
}
}).start();
}
/**
* 测试方法;
*
* @param num 传入的数字;
* @param callCount 当前方法被调用的次数;
* @param sle