java 多线程访问同一个对象数据保护的问题

时间:2022-05-25 20:45:08

java 多线程同时访问统一个数据的时候,会引起一些错误,后面的线程会修改数据,而前面的线程还在使用修改前的内容,

使用 synchronized 关键字,保证代码块只能有一个线程来访问

public class myThreadtest {

  public static void main(String[] args) {
    //只有t1一分的时候,出现数据共享的问题
    myThread t1= new myThread(0);

//两个线程访问同一个对象
    new Thread(t1,"first").start();
    new Thread(t1,"second").start();
  }

}

public class myThread implements Runnable {
      int i;
      public myThread(int i){
        this.i = i;
      }
      Object obj = new Object(); //同步的标记对象
      @Override
      public void run() {
        synchronized (obj) { //不会有两个线程同时访问代码块
        // TODO Auto-generated method stub
        for(i = 0;i<5;i++){
        try {
          Thread.sleep(1000);
        } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
      //System.out.println(Thread.currentThread().getName()+i);
      System.out.println(Thread.currentThread().getName()+i);

    }
  }

  }
}