gpt4 book ai didi

java - 只要 ArrayList 中有元素,如何使用线程来执行功能?

转载 作者:行者123 更新时间:2023-11-30 06:33:00 25 4
gpt4 key购买 nike

我正在尝试将我的客户端网络处理代码移到另一个线程中,这样它就不会在处理数据包时挂起主线程。

基本上我有一个接收到的数据包的 ArrayList。 Thread 运行无限循环,处理任何新数据包。然而,这会使我的 CPU 达到 100%,因为即使没有新数据包,它仍然会不断循环。

我想做的是让处理线程 hibernate ,而我的线程在有新数据包时通知它。

我正在用 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
}
}

最佳答案

与其使用 ArrayList,不如使用 BlockingQueue一些描述(例如 LinkedBlockingQueue )。这正是为此类用例而设计的。

生产者代码将使用offer 来提供一个新元素,处理线程将使用poll 并在元素出现之前使用超时来阻塞(廉价地)。

关于java - 只要 ArrayList 中有元素,如何使用线程来执行功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8462853/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com