我想在线程
中的Vector运行中使用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=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();
}
我尝试这样做:
synchronized(F){
while(F.size()==0) {
F.wait();
}
Message= new String(F.get(0));
F.removeElementAt(0);
}
但我有这个感觉,我试图运行
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)
答案 0 :(得分:1)
您正在致电
this.File_Message.wait();
在某个没有所引用对象的监视器的线程中。您可以使用synchronized
方法执行此操作。在synchronized
方法中,监视器是在this
对象上获取的。
对我来说,为什么你试图在该对象上调用wait()
并不明显,但如果你想这样做,你需要拥有它的监视器。
浏览tutorial on synchronized
methods和Object#wait()
的javadoc。