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()的作用

展开

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值