大神幫我看看自己寫的多線程哪里出了問題
主要功能是兩個(gè)線程操作一個(gè)變量,一個(gè)讓它+1,一個(gè)讓它-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(); } }
運(yùn)行結(jié)果就是輸出一個(gè)1,就停住了,哪里死鎖了還是全部等待了
2016-11-20
你的print2方法里,wait方法沒有在if分支里。