为了账号安全,请及时绑定邮箱和手机立即绑定

使用多线程打印奇数和偶数

使用多线程打印奇数和偶数

慕姐8265434 2021-12-01 16:27:49
我对线程很陌生,只是想掌握基础知识。所以,我尝试了以下代码一个接一个地打印奇数和偶数。但我得到一个空指针。公共类 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);  


查看完整回答
反对 回复 2021-12-01
?
千巷猫影

TA贡献1829条经验 获得超7个赞

看到你什么都不做

Print print = new Print(false);  // this statement

在 main() 方法中。

将“打印”对象传递给奇数和偶数类构造函数。

你得到空指针因为你没有初始化打印对象奇数和偶数类。


查看完整回答
反对 回复 2021-12-01
  • 2 回答
  • 0 关注
  • 154 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信