我测试的一个关于synchronize关键字的例子,如下当我为静态方法inc()加入syn关键字的时候,如果我把Thread.sleep()注释掉,同步效果发生作用,main方法输出了正确的结果1000可是,如...
我测试的一个关于synchronize关键字的例子,如下
当我为静态方法inc()加入syn关键字的时候,如果我把
Thread.sleep()注释掉,同步效果发生作用,main方法输出了正确的结果1000
可是,如果我放开注释,同步效果没了,输出的是不稳定的值,这是为什么??
代码 :
public class Counter {
private static int count = 0;
public synchronized static void inc() {
//这里延迟1毫秒,使得结果明显
// try {
// Thread.sleep(1);
// } catch (InterruptedException e) {
// }
count++;
}
public static void main(String[] args) {
//同时启动1000个线程,去进行i++计算,看看实际结果
for (int i = 0; i < 1000; i++) {
new Thread(new Runnable() {
@Override
public void run() {
{
Counter.inc();
}
}
}).start();
}
//这里每次运行的值都有可能不同,可能为1000
System.out.println("运行结果:Counter.count=" + Counter.count);
}
}
展开