老师,我按照视频上老师的方法敲了代码,运行都没问题,但是突然发现,这个程序并没有自动结束,IDEAL中的红色方块一直亮着,如下图:
![]() |
麻烦老师帮忙看看是怎么回事,具体代码粘贴如下:
1.Printer类代码
package com.bjsxt.thread; public class Printer { private int index=1;//用于统计第几次打印 public synchronized void print(int number){ while(index%3==0){ try { super.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.print(number); index++; super.notifyAll();//唤醒所有在printer这个对象上所有等待的线程 } public synchronized void print(char letter){ while(index%3!=0){ try { super.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.print(""+letter); index++; super.notifyAll(); } }
2.数字打印类代码
package com.bjsxt.thread; public class NumberPrinter implements Runnable { private Printer printer; public NumberPrinter(Printer printer) { this.printer=printer; } @Override public void run() { for(int i=1;i<=52;i++){ printer.print(i); } } }
3.字母打印类代码
package com.bjsxt.thread; public class LetterPrinter implements Runnable{ private Printer printer; public LetterPrinter(Printer printer){ this.printer=printer; } @Override public void run() { for(char c='A';c<='z';c++){ printer.print(c); } } }
4.主线程测试代码
package com.bjsxt.thread; public class Test { public static void main(String[] args) { //创建共享资源的对象 Printer p=new Printer(); NumberPrinter np=new NumberPrinter(p); LetterPrinter lp=new LetterPrinter(p); //创建代理类,并启动线程 new Thread(np).start(); new Thread(lp).start(); } }