鱼C论坛

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

简单的线程同步问题

[复制链接]
发表于 2015-2-27 23:56:13 | 显示全部楼层 |阅读模式
20鱼币
调用函数add()累加,用上了synchronized关键字,怎么还是不行?问题出在20行。
  1. public class 线程1 extends Thread implements Runnable{
  2. static 线程1 k[];
  3. static int sum;
  4. public static void main(String args[]){
  5. sum=0;
  6. k=new 线程1[20];
  7. for(int n=0;n<20;n++){
  8. k[n]=new 线程1();
  9. k[n].start();
  10. }
  11. loop:
  12. while(true){
  13. for(int n=0;n<20;n++){
  14. if(k[n].isAlive())continue loop; //若是有线程在执行,继续循环
  15. }
  16. break;
  17. }
  18. System.out.println(sum);
  19. }
  20. synchronized void add(){ //问题出在这?
  21. sum +=10;
  22. }

  23. @Override
  24. public void run(){
  25. for(int n=0;n<100;n++){
  26. add();
  27. try {sleep(10); } catch (InterruptedException ex) { }
  28. }
  29. }
  30. }
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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


  1. synchronized static  void add(){ //加static修饰
  2.    //System.out.println(sum);
  3. sum +=10;
  4. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> 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-3-29 00:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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