典型数据不同步造成的错误(1)

来源:互联网 发布:映射网络驱动器端口号 编辑:程序博客网 时间:2024/06/04 18:51

 

class sharedata
{
 public static String szdata="";
}//共享数据块

     class threaddemo extends Thread
 {
   private sharedata oshare;
       threaddemo()
      {}
      threaddemo(String szname,sharedata oshare)
       {
        super(szname);
        this.oshare=oshare;
       }
    
     
      public void run()
    {
       for(int i=0;i<5;i++)
     {if(this.getName().equals("Thread1"))
     {oshare.szdata="这是第1个线程"; 
        try{
                Thread.sleep((int)Math.random()*1000);//休眠就是让出当前线程的CPU的调度权限,然后供替他别的线程使用,可以没有
           }
        catch(InterruptedException e)
          {}
        System.out.println(this.getName()+":"+oshare.szdata);
       }
       else if(this.getName().equals("Thread2"))
      {
   oshare.szdata="这是第2个线程"; 
  
        try{
           Thread.sleep((int)Math.random()*1000);//休眠就是让出当前线程的CPU的调度权限,然后供替他别的线程使用,可以没有
              }
          catch(InterruptedException e)
             {}
  
          System.out.println(this.getName()+":"+oshare.szdata);
     }
     }
 }
}


     public class nosynchornized {

      /**
       * @param args
       */
      public static void main(String[] args) {
       // TODO Auto-generated method stub

      
       sharedata oshare=new sharedata();
       
       threaddemo th1=new threaddemo("Thread1",oshare);
       threaddemo th2=new threaddemo("Thread2",oshare);
        th1.start();
        th2.start();
      
      }

     }

结果为:

Thread2:这是第2个线程
Thread1:这是第2个线程
Thread2:这是第2个线程
Thread1:这是第2个线程
Thread2:这是第1个线程
Thread1:这是第2个线程
Thread2:这是第1个线程
Thread1:这是第2个线程
Thread2:这是第1个线程
Thread1:这是第1个线程
//可以利用synchornized来使数据同步,请看下一篇