Я новичок в потоках и просто пытаюсь понять основы, поэтому я попробовал следующий код для печати нечетных и четных чисел один за другим.
Но я получаю нулевой указатель.
Public class 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();
}
}
Class Even extends Thread {Print print;
public void run()
{
try {
print.printeven();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Class Odd расширяет 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 ответа
Вы не создали экземпляр 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);
Смотрите, вы ничего не делаете с
Print print = new Print(false); // this statement
В методе main ().
Передать объект "print" в Конструктор классов Odd и Even.
Вы получаете нулевой указатель, потому что вы не инициализируете класс print Object Odd и Even.
Новые вопросы
java
Java - это язык программирования высокого уровня. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег редко используется отдельно и чаще всего используется вместе с [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] и [maven].