lia*_*dee 2 java networking multithreading arraylist
我正在尝试将我的客户端网络处理代码移动到另一个线程中,因此在处理数据包时它不会挂起主线程.
基本上我有一个收到的数据包的ArrayList.线程运行无限循环,处理任何新数据包.然而,这使我的CPU达到100%,因为即使没有新的数据包,它仍然会持续循环.
我想要做的是让处理线程处于休眠状态,并且我的线程在有新数据包时通知它.
我用Java编写代码.
编辑:
这就是我努力实现的目标 -
// Main Thread
// Listener
public void newPacketReceived(){
receiverThread.addNewPacketToProcessingQueue(null);
}
// Receiver Thread
ArrayList<GamePacket> processingQueue = new ArrayList<GamePacket>();
public void addNewPacketToProcessingQueue(GamePacket packet){
processingQueue.add(packet);
this.notify();
}
public void run(){
while(true){
// Process Packets
this.sleep(); // Sleep until thread is notified
}
}
Run Code Online (Sandbox Code Playgroud)
而不是使用ArrayList
,使用BlockingQueue
一些描述(例如LinkedBlockingQueue
).这是为这种用例而设计的.
生产者代码将用于offer
提供新元素,并且处理线程将使用poll
超时来阻止(廉价地)直到元素存在.
归档时间: |
|
查看次数: |
70 次 |
最近记录: |