一个简单的计数器本来以为不需要同步保护后来发现不行还是得加上程序
public class TestMain {
int i = ; //计数器初始值为
public static void main(String[] args) {
TestMain c = new TestMain();
Worker x = new Worker(c);
for (int i=; i<; i++) { //个线程
new Thread(x)start();
}
while (true) { //每隔一秒中输出计数器的值
Systemoutprintln(ci);
try {
Threadsleep();
} catch (InterruptedException e) {
}
}
}
}
class Worker implements Runnable {
TestMain c;
public Worker(TestMain c) {
thisc = c;
}
public void run() {
try {
Threadsleep((int)(Mathrandom() * )); //随机Sleep一段时间
} catch (InterruptedException e) {
}
ci++; //计数器自增 问题在这里 并发写入
}
}
上面的程序%的几率结果是其余的是
ci++一句需要并发保护
本来我以为Java里面++是原子的呢呵呵
解决方法加上同步控制或者使用JDK里面新增加的AtomicInteger类