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

我对线程很陌生,只是想掌握基础知识。所以,我尝试了以下代码一个接一个地打印奇数和偶数。


但我得到一个空指针。


公共类 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();

        }

   }

}


如果有人可以详细解释我在这里做错了什么,并给出一个基本的想法如何去调试这个。


慕姐8265434
浏览 155回答 2
2回答

缥缈止盈

您尚未在 ODD 和 EVEN 类中实例化 Print 实例。对 Even 和 Odd 构造函数执行此操作。public Odd(Print print)&nbsp;{&nbsp;&nbsp; this.print = print;}实例化时这样做。&nbsp;Print print = new Print(false);&nbsp;Even e =new Even(print);&nbsp;Odd o = new Odd(print);&nbsp;&nbsp;

千巷猫影

看到你什么都不做Print print = new Print(false); &nbsp;// this statement在 main() 方法中。将“打印”对象传递给奇数和偶数类构造函数。你得到空指针因为你没有初始化打印对象奇数和偶数类。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java