Juneava
2016-11-20 12:37
主要功能是两个线程操作一个变量,一个让它+1,一个让它-1然后交替输出
public class Res { private boolean flag = true; private int x = 1; public synchronized void print1() { if (!flag) { try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println(x++); flag = false; this.notify(); } public synchronized void print2() { if (flag) { } try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(x--); flag = true; this.notify(); } }
public class PrintOne implements Runnable{ private Res r; public PrintOne(Res r){ this.r=r; } public void run(){ while(true){ r.print1(); } } }
public class PrintTwo implements Runnable{ private Res r; public PrintTwo(Res r){ this.r=r; } public void run(){ while(true){ r.print2(); } } }
public class Test { public static void main(String[] args) { Res r=new Res(); new Thread(new PrintOne(r)).start(); new Thread(new PrintTwo(r)).start(); } }
运行结果就是输出一个1,就停住了,哪里死锁了还是全部等待了
你的print2方法里,wait方法没有在if分支里。
深入浅出Java多线程
186088 学习 · 464 问题
相似问题