Я пытаюсь переместить мой код обработки клиентской сети в другой поток, чтобы он не зависал при обработке пакета.
В основном у меня есть ArrayList полученных пакетов.Поток выполняет бесконечный цикл while, обрабатывая любые новые пакеты.Однако это увеличивает нагрузку на мой процессор до 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
}
}