gpt4 book ai didi

java - 哪种实现线程的方式最有益?

转载 作者:行者123 更新时间:2023-11-30 09:10:02 26 4
gpt4 key购买 nike

我正在开发一个用 Java 编写的网络服务器。 Web 服务器正在处理与客户端的 websocket 通信,因此我们有一个名为 ClientHandler 的类,它有一个 socket 和 id 作为实例变量。 ClientHandler 需要有一个函数来监听来自客户端的消息。此函数需要与服务器的其余部分并行工作,并且由于“消息读取”是一个线程阻塞函数,因此我们需要一个单独的线程。

这里有两种实现方式:

public class ClientHandler implements Runnable{

//Instance variable
public Thread listener = new Thread(this);
.
.
.
public void run() {

while (!Thread.interrupted()){
//Listening code here
}
}

}

然后通过写入启动监听线程

clientHandler.listener.start();

并通过写入来停止它

clientHandler.listener.interrupt();

或者这个方法:

public class ClientHandler {

//Instance variable
private Thread listenerTread;
private boolean alive; //set to true in constructor
.
.
.
public void listenToClient() {
listenerTread = new Thread(new Runnable() {
@Override
public void run(){
while (!alive){
//Listening code here
}
}
});
}

}

然后通过调用函数listenToClient()启动线程

clientHandler.listenToClient();

并通过切换 alive = false 来停止它。

我试图找到解释最佳解决方案的人,但大多数比较都是在实现 Runnable 或扩展 Thread 之间进行的。使用上述任何一种方法有什么缺点吗?如果我想在一个类中有多个线程,哪种方法最好?

最佳答案

我不确定您是否要显式创建 Thread 实例。您为什么不尝试使用您提交任务执行的 ThreadPoolExecutor。在此处阅读有关线程池的更多信息。 http://docs.oracle.com/javase/tutorial/essential/concurrency/pools.html

由于您可以拥有多个客户端,因此使用线程池可以提高应用程序的性能。

关于java - 哪种实现线程的方式最有益?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22712564/

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