Использование многопоточности для печати нечетных и четных чисел - PullRequest
0 голосов
/ 22 октября 2018

Я довольно новичок в потоках и просто пытаюсь понять основы. Итак, я попробовал следующий код, чтобы печатать нечетные и четные числа один за другим.

Но я получаюнулевой указатель.

открытый класс 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();
}

}

класс Even extends Thread {Print print;

public void run()
{
  try {
    print.printeven();

} catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
}

}

class Odd extends Thread {Print print;

public void run()
{
  try {
    print.printodd();

} catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
}

}

class Print {

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 ]

0 голосов
/ 22 октября 2018

См. Вы ничего не делаете с

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

в методе main ().

передаете объект "print" в конструктор класса Odd и Even.

Вы получаете нулевой указатель, поскольку вы не инициализируете класс печати Object Odd и Even.

0 голосов
/ 22 октября 2018

Вы не создали экземпляр Print экземпляра в классах ODD и EVEN.

Сделайте это как для четных, так и для нечетных конструкторов.

public Odd(Print print) 
{ 
  this.print = print;
}

При создании экземпляра делайте так.

 Print print = new Print(false);
 Even e =new Even(print);
 Odd o = new Odd(print);  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...