我对线程很陌生,只是想掌握基础知识。所以,我尝试了以下代码一个接一个地打印奇数和偶数。但我得到一个空指针。公共类 P {public static void main(String[] args) throws InterruptedException { Print print = new Print(false); Even e =new Even(); Odd o = new Odd(); e.start(); o.start();}}类甚至扩展线程{打印打印;public void run(){ try { print.printeven();} catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace();}}}类奇数扩展线程 { 打印打印;public void run(){ try { print.printodd();} catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace();}}}类打印{public boolean flag=false;Print(boolean flag){ this.flag=flag;}synchronized void printodd() throws InterruptedException { for(int i=1;i<10;i=i+2) if(!flag) { System.out.println(i); notifyAll(); flag=true; } else { wait(); } }synchronized void printeven() throws InterruptedException { for(int i=2;i<=10;i=i+2) if(flag) { System.out.println(i); notifyAll(); flag=false; } else { wait(); } }}如果有人可以详细解释我在这里做错了什么,并给出一个基本的想法如何去调试这个。
2 回答
缥缈止盈
TA贡献2041条经验 获得超4个赞
您尚未在 ODD 和 EVEN 类中实例化 Print 实例。
对 Even 和 Odd 构造函数执行此操作。
public Odd(Print print)
{
this.print = print;
}
实例化时这样做。
Print print = new Print(false);
Even e =new Even(print);
Odd o = new Odd(print);
千巷猫影
TA贡献1829条经验 获得超7个赞
看到你什么都不做
Print print = new Print(false); // this statement
在 main() 方法中。
将“打印”对象传递给奇数和偶数类构造函数。
你得到空指针因为你没有初始化打印对象奇数和偶数类。
添加回答
举报
0/150
提交
取消