只要ArrayList中有元素,如何使用Threads执行函数?

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)

Jon*_*eet 5

而不是使用ArrayList,使用BlockingQueue一些描述(例如LinkedBlockingQueue).这是为这种用例而设计的.

生产者代码将用于offer提供新元素,并且处理线程将使用poll超时来阻止(廉价地)直到元素存在.