加法程序,现在的问题是我用了synchronized关键字,为什么还是出现了冲突,求解。
 public class ThreadSum
{
    //data field
    static Num num = new Num(0);
   
    public static void main(String[] args)
    {
       for(int i = 1; i <= 100; i++)
       {
      new Thread(new AddTask()).start();
       }
       System.out.print(num.getNum());
    }
   
    static class AddTask implements Runnable      
    { 
       public void run() 
       { 
  synchronized(num)
  {
     num.setNum(num.getNum() + 1);
  }
       }
    }
}class Num

    private int num;

    Num(int num)
    {
       this.num = num;
    }
  
    public int getNum()
    {
      return num;
    }
  
    public void setNum(int num)
    {
    this.num = num;
    }
}

解决方案 »

  1.   

    出现什么冲突?
    num是static的,所以相当于单线程执行,
    你的线程可能还没执行结束,main线程就打印了,LZ是不是指这个?
      

  2.   

    这个是对的,只是在打印出来的时候,线程还没执行完synchronized(num)
          {
             num.setNum(num.getNum() + 1);
          }System.out.print(num.getNum());
      

  3.   

    额,按照我的设想,结果应该是100,可结果是随机的,我以为是多线程同时访问num造成的冲突,可我对num同步了仍然不行
      

  4.   


    不是的,线程没有冲突,在所有线程执行完之后,num是100的,只是有可能你的主线的打印比后面一些线程早执行,所以就不是100了.