漠水 发表于 2015-2-27 23:56:13

简单的线程同步问题

调用函数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-2-27 23:56:14

本帖最后由 百日维新 于 2015-3-3 00:52 编辑



synchronized staticvoid add(){ //加static修饰
   //System.out.println(sum);
sum +=10;
}

qweqweqwe 发表于 2015-6-3 00:53:14

在方法上加synchronized等同于锁(this),你的程序里new了20个对象,所以他们各锁各的,互不干扰.....
建议你锁一个这20条线程共有的对象,比如static的数组k
页: [1]
查看完整版本: 简单的线程同步问题