本帖最后由 菠菜(yinshi) 于 2012-7-2 19:17 编辑
回答别人问题时,搞得自己有了不一样的疑问?有点晕,希望得到解决- public class Exercise31 {
- public static void main(String[] args) {
- final Printer p=new Printer();
- new Thread(){
- public void run()
- {
- for(int i=0;i<5;i++)
- p.print1();
-
- }
-
- }.start();
- new Thread(){
- public void run()
- {
- for(int i=0;i<5;i++)
- p.print2();
-
- }
-
- }.start();
-
- }
-
- }
- class Printer
- {
- private int turn=1;
- public synchronized void print1()
- {
- if(turn!=1)
- try {
- this.wait();
- } catch (InterruptedException e) {
-
- e.printStackTrace();
- }
- else
- System.out.println(Thread.currentThread().getName()+"A");
- turn=2;
- this.notify();
- }
- public synchronized void print2()
- {
- if(turn!=2)
- try {
- this.wait();
- } catch (InterruptedException e) {
-
- e.printStackTrace();
- }
- else//这里的加上else后为什么只能每个线程运行一次?如果去掉则可以正常输出。但是如果去掉的话if语句的范围是什么?是不是在try前和notify()后加上大括号人范围?如果是的话为什么没有输出?<font color="red">求详解</font>,上面的那个if语句的问题也是这,就不写了
- System.out.println(Thread.currentThread().getName()+"B");
- turn=1;
- this.notify();
- }
- }
复制代码 |
|