New*_*att 5 java multithreading callback
我想弄清楚如何消除 Java 线程中的繁忙循环。该线程除了等待来自 Listener 类的回调之外什么都不做。线程类看起来像这样:
class MyThread implements Runnable, MessageListener{
private Listen Listener;
public MyThread(){
Listener = new Listener(this);
}
public void run(){
while(true){}
}
public void messageReceived(Message m){
//do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
我试图使这段代码尽可能简单。这个想法是监听器正在等待从串行端口接收一些数据,当接收到消息时,线程将对其进行一些处理。我更喜欢使用一些同步变量,例如 Message 的 BlockingQueue,但我无法修改 Listener 代码。当然,问题在于运行循环占用了处理器周期。我的问题:
如果我在运行循环中等待或睡眠,函数调用是否仍能按预期工作?(我不确定如何测试这是否在 100% 的时间内有效)。
有没有更好的方法来完全避免这个循环?
做这样的事情
class MyThread implements Runnable, MessageListener{
private Listen Listener;
private Object lock = new Object();
public MyThread(){
Listener = new Listener(this);
}
public void run(){
while(true){
synchronized (lock) {
try{
lock.wait();
// use the updated status
}catch (Exception e) {
e.printStackTrace()
}
}
}
}
public void messageReceived(Message m){
synchronized (lock) {
try{
// Do something with the message here like update some status
lock.notify();
}catch (Exception e) {
e.printStackTrace()
}
}
}
Run Code Online (Sandbox Code Playgroud)
一旦收到事件,您就更新一些状态/存储消息并释放通知线程。然后从你的线程处理事件
| 归档时间: |
|
| 查看次数: |
4365 次 |
| 最近记录: |