我有两个线程--A和B.现在要求是在 Java 程序中实现以下内容:
功能:
1)线程将在每一步加倍i时打印i = 1到50,
2)B线程在每一步中将j除以5将打印j = 200到0
和
手续/机制:
1)A将执行一步并等待B,
2)B将执行一步并等待A
并且这一直持续到条件匹配。 这是我的代码。
代码:
public class JavaApplication6 {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
A a = new A();
B b = new B();
a.setOtherThread(b);
b.setOtherThread(a);
a.start();
}
}
class A extends Thread{
Thread b;
public void setOtherThread(Thread t){
b = t;
}
public void run(){
int i =1;
synchronized(b){
while(i<50){
try {
System.out.println("Request i = "+i);
i = i*2;
if(!b.isAlive()){
b.start();
}else{
notify();
}
b.wait();
} catch (InterruptedException ex) {
System.out.println("Error in Request Thread on wait");
Logger.getLogger(JavaApplication6.class.getName()).log(Level.SEVERE, null, ex);
}
}
System.out.println("A Thread Will Close Now");
}
}
}
class B extends Thread{
Thread a;
public void setOtherThread(Thread t){
a = t;
}
public void run(){
int j = 200;
synchronized(a){
while(j>5){
try {
System.out.println("J in Response thread = "+j);
j = j/5;
notify();
a.wait();
} catch (InterruptedException ex) {
Logger.getLogger(ReceiveResponse.class.getName()).log(Level.SEVERE, null, ex);
}
}
System.out.println("B Will Close Now");
}
}
}
现在它在A在其循环中运行第1步之后运行其循环的第2步后抛出异常。 输出如下:
输出:
Exception in thread "Thread-1" java.lang.IllegalMonitorStateException
at java.lang.Object.notify(Native Method)
at javaapplication6.B.run
Exception in thread "Thread-0" java.lang.IllegalThreadStateException
at java.lang.Thread.start
at javaapplication6.A.run
我在线程方面非常弱。因此,如果能够详细了解我的错误以及正确实现我的要求的方法,那将会非常有用。
提前致谢。