简单的线程同步问题
调用函数add()累加,用上了synchronized关键字,怎么还是不行?问题出在20行。public class 线程1 extends Thread implements Runnable{static 线程1 k[];
static int sum;
public static void main(String args[]){
sum=0;
k=new 线程1;
for(int n=0;n<20;n++){
k=new 线程1();
k.start();
}
loop:
while(true){
for(int n=0;n<20;n++){
if(k.isAlive())continue loop; //若是有线程在执行,继续循环
}
break;
}
System.out.println(sum);
}
synchronized void add(){ //问题出在这?
sum +=10;
}
@Override
public void run(){
for(int n=0;n<100;n++){
add();
try {sleep(10); } catch (InterruptedException ex) { }
}
}
}
本帖最后由 百日维新 于 2015-3-3 00:52 编辑
synchronized staticvoid add(){ //加static修饰
//System.out.println(sum);
sum +=10;
}
在方法上加synchronized等同于锁(this),你的程序里new了20个对象,所以他们各锁各的,互不干扰.....
建议你锁一个这20条线程共有的对象,比如static的数组k
页:
[1]