天天看點

java await signal_JAVA 中signal和await 的使用

publicvoidonReceiveMsg(Stringmessage){這個函數是不定時調用的log.info("2"+message);msglink.add(message);//這是一個連結清單empty.signal();}classHandThreadextendsThread{publicvo...

public void onReceiveMsg(String message) { 這個函數是不定時調用的

log.info("2"+message);

msglink.add(message); //這是一個連結清單

empty.signal();

}

class HandThread extends Thread{

public void run(){

while(true){

lock.lock();

try{

while(msglink.size()==0){

System.out.println("暫無主動通知消息");

empty.await(); //即便受到了信号,也卡在這裡不向下執行

}

System.out.println("msglink:"+msglink.size());

String msg = msglink.removeFirst();

handle(msg);

}catch(InterruptedException e){

log.error("HandThread is interrupted!",e);

}

finally{

lock.unlock();

}

}

}

}

如上,我需要接受onReceiveMsg()函數中的 message參數并解析,為了保證效率,接受和處理分離開來。message存在一個連結清單裡面,每次将先來的消息加傳入連結表尾,從表頭取資料解析。線程在另一個函數裡啟動。請大神幫我看看代碼,指點錯誤。另外也請問下這個 lock.lock() 和lock.unlock()的作用

展開