鱼C论坛

 找回密码
 立即注册
查看: 4389|回复: 2

简单的线程同步问题

[复制链接]
发表于 2015-2-27 23:56:13 | 显示全部楼层 |阅读模式
20鱼币
调用函数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[20];
for(int n=0;n<20;n++){
k[n]=new 线程1();
k[n].start(); 
}
loop:
while(true){
for(int n=0;n<20;n++){
if(k[n].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) { }
}
}
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-2-27 23:56:14 | 显示全部楼层
本帖最后由 百日维新 于 2015-3-3 00:52 编辑


synchronized static  void add(){ //加static修饰
   //System.out.println(sum); 
sum +=10;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-6-3 00:53:14 | 显示全部楼层
在方法上加synchronized等同于锁(this),你的程序里new了20个对象,所以他们各锁各的,互不干扰.....
建议你锁一个这20条线程共有的对象,比如static的数组k
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 12:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表