java线程锁 synchronized

    xiaoxiao2026-04-15  5

    //java锁是对同一个对象或者同一个对象中的方法加锁;关键是同一个

    错误的加锁方式

    public class MyWaitNotify {public static void main(String[] args) {MyT m1=new MyT("A");MyT m2=new MyT("B");m1.start();m2.start();} } class MyT extends Thread{String name;  public MyT(String name)  {this.name=name;   }  @Override public  void run() {sys(); }public   void sys(){synchronized(this)//this只是对此次new的对象加锁,new两个对象,this表示不同,加锁失败{for(int i=0;i<1000;i++){System.out.println(name +"  "+i);} }} }

    正确的加锁方式

    public class MyWaitNotify { static Object o=new Object();//加锁的对象, public static void main(String[] args) { MyT m1=new MyT("A",o);//m1.m2同时使用一个对象 MyT m2=new MyT("B",o); m1.start(); m2.start(); } } class MyT extends Thread{ String name; Object o;  public MyT(String name,Object o)  { this.name=name; this.o=o;    }  @Override public  void run() { sys(); } public   void sys() { synchronized(o) { for(int i=0;i<1000;i++) { try { sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(name +"  "+i); }  } } }
    最新回复(0)