Java 线程中的IllegalMonitorStateException
我想使用同步的矢量运行线程 我尝试了两种方法,一种是等待,另一种是等待 我想从静态类调用notify方法 这是我的线程代码:Java 线程中的IllegalMonitorStateException,java,wait,synchronized,Java,Wait,Synchronized,我想使用同步的矢量运行线程 我尝试了两种方法,一种是等待,另一种是等待 我想从静态类调用notify方法 这是我的线程代码: import java.io.IOException; import java.io.PrintWriter; import java.util.Scanner; import java.util.Vector; public class TSend extends Thread { Vector<String> File_Message=ne
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;
import java.util.Vector;
public class TSend extends Thread {
Vector<String> File_Message=new Vector<String>();
public void save_out_putMessage(String out_Msg){
synchronized(this.File_Message){
this.File_Message.add(out_Msg);
this.File_Message.notify();
}
}
public synchronized String GetMessage() throws InterruptedException{
String message;
while(File_Message.size()==0){
this.File_Message.wait();
}
message = File_Message.get(0);
File_Message.removeElementAt(0);
return message;
}
public synchronized void Recepteur_de_Message (String message){
/*
* Pour savgarde tout les message des client dans un vecteur Message .
*
*/
File_Message.add(message);
notify();
}
@Override
public void run(){
try{
String Message ;
while(true){
str =GetMessage();
}
}catch(Exception e){
e.printStackTrace();
}
但我有一个例外,我想逃跑
java.lang.IllegalMonitorStateException
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:485)
at TSend.GetMessage(TSend.java:39)
at TSend.run(TSend.java:78)
你在打电话吗
this.File_Message.wait();
在某个线程中,该线程不拥有引用对象上的监视器。您可以通过synchronized
方法执行此操作。在synchronized
方法中,监视器在此
对象上获取
我不清楚为什么要在该对象上调用wait()
,但如果要这样做,您需要在该点拥有它的监视器
检查和的javadoc
this.File_Message.wait();