package test;
public class test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
final fun ff = new fun();
new Thread(new Runnable() {
@Override
public void run() {
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ff.a();
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
ff.b();
this.notifyAll();
}
}).start();
}
}
class fun {
public void a() {
for (int i = 0; i < 100; i++)
System.out.println("this is A:" + i);
}
public void b() {
for (int i = 0; i < 100; i++)
System.out.println("this is B:" + i);
}
}
报错
Exception in thread "Thread-1" java.lang.IllegalMonitorStateException
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:485)
at test.test$1.run(test.java:18)
at java.lang.Thread.run(Thread.java:680)
Exception in thread "Thread-2" java.lang.IllegalMonitorStateException
at java.lang.Object.notifyAll(Native Method)
at test.test$2.run(test.java:38)
at java.lang.Thread.run(Thread.java:680)
------最佳解决方案--------------------------------------------------------
此外,我记得我还回复过楼主在另一个帖子中的问题。
在那个帖子中,我贴了一个很长的程序。
那个程序中,我建了个方法countmoney(),而且在其上加了synchronized。
线程A与线程B都会进入那个countmoney()方法中。这样就是让两个线程进入同一个synchronized域,使用同一个同步锁。在countmoney()方法中具有wait()和notify()方法,就能控制线程A与线程B了。
synchronize作用域都是外部类的实例对象,所以那个程序用的是this。
------其他解决方案--------------------------------------------------------
没有错误呀!!!这是截图
------其他解决方案--------------------------------------------------------
wait 和notify 之类的必须都放在进程同步块或者同步方法中。用synchronized 关键字。
------其他解决方案--------------------------------------------------------
说错了,是线程
------其他解决方案--------------------------------------------------------
又看到了熟悉的wait()、notify()……线程啥的我最在行了
------其他解决方案--------------------------------------------------------
问题出在这里:
this.wait();
this.notify();
this的实例找不到。注意,这里的this不是指的线程,而是指某个外部类Test的实例对象。通过这个实例对象对线程进行操控。
------其他解决方案--------------------------------------------------------
借用一下。。。
个人浅显的觉得.
new Thread(new Runnable){
};
这样的方式不太好。。。最大的问题在this的时候找不到实例,建议还是取个名字吧。