发布网友 发布时间:2022-05-02 04:06
共3个回答
热心网友 时间:2022-06-28 01:31
我就给你个例子算了: public class Lock implements Runnable{ //测试死锁 public int flag = 1; static Object o1 = new Object(), o2 = new Object(); public void run (){ System.out.println("flag:"+flag); if(flag == 1){ synchronized (o1){ //运行到这的时候,o1就被上锁了 try { Thread.sleep(500); } catch (Exception e){ e.printStackTrace(); } synchronized (o2){ //运行到这的时候,o2就被上锁了 System.out.println("1"); } } } if(flag == 0){ synchronized (o2){ //运行到这的时候,o2就被上锁了 try { Thread.sleep(500); } catch (Exception e){ e.printStackTrace(); } synchronized (o1){ //运行到这的时候,o1就被上锁了 System.out.println("0"); } } } } public static void main (String []args){ Lock t1 = new Lock(); Lock t2 = new Lock(); t1.flag = 1; t2.flag = 0; Thread td1 = new Thread(t1); Thread td2 = new Thread(t2); td1.start(); td2.start(); } }热心网友 时间:2022-06-28 01:31
用在单例模式上。热心网友 时间:2022-06-28 01:32
加了synchronized的在同一时间只能被一个东西调用,只有当这个东西调用完了后才能被别的调用