package threadShareResource1;
public class NonSynchro1 {
private int sum = 0;
public static void main(String[] args) {
NonSynchro1 n = new NonSynchro1();
n.task();
System.out.println(n.getSum());
}
public synchronized void sumAddOne(){
sum++;
}
public void task(){
for (int i = 0; i < 100; i++) {
new Thread(new Runnable(){
@Override
public void run() {
sumAddOne();
}
}).start();
/* try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
} */
}
}
public int getSum() {
return sum;
}
}
没有注释的代码部分,程序有数据损坏,每次运行它时都不是100。但我认为synchronized关键字应该获得对sumAddOne方法的锁定,该方法是我的程序的关键区域,允许一次线程访问此方法。同步关键字不起作用
我试着使用ExecutorService,但它并没有给出100个所有的运行。
public void task(){
ExecutorService s = Executors.newCachedThreadPool();
for (int i = 0; i < 100; i++) {
s.execute(new Thread(new Runnable(){
@Override
public void run() {
sumAddOne();
}
}));
}
s.shutdown();
while(!s.isTerminated()){}
}
预期行为是什么?你想达到什么目的? –
测试何时使用同步访问公共变量的100个线程。所有的运行结果应该是100。 –