使用多线程打印奇数和偶数
Use of Multi Threading for printing Odd and Even Numbers
我对线程很陌生,只是想掌握 basics.So,我尝试了以下代码来一个接一个地打印奇数和偶数。
但是我得到一个空指针。
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 甚至扩展线程
{
打印打印;
public void run()
{
try {
print.printeven();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class 奇数扩展线程
{
打印打印;
public void run()
{
try {
print.printodd();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class 打印 {
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();
}
}
}
如果有人可以详细解释我在这里做错了什么,并给出一个基本的想法来调试它。
您还没有在 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);
看你什么都没做
Print print = new Print(false); // this statement
在 main() 方法中。
将 "print" 对象传递给奇数和偶数 class 构造函数。
你得到空指针因为你没有初始化打印对象奇数和偶数class。
我对线程很陌生,只是想掌握 basics.So,我尝试了以下代码来一个接一个地打印奇数和偶数。
但是我得到一个空指针。
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 甚至扩展线程 { 打印打印;
public void run()
{
try {
print.printeven();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class 奇数扩展线程 { 打印打印;
public void run()
{
try {
print.printodd();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class 打印 {
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();
}
}
}
如果有人可以详细解释我在这里做错了什么,并给出一个基本的想法来调试它。
您还没有在 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);
看你什么都没做
Print print = new Print(false); // this statement
在 main() 方法中。
将 "print" 对象传递给奇数和偶数 class 构造函数。
你得到空指针因为你没有初始化打印对象奇数和偶数class。