java如何将连续运行的子线程的结果安全地传递回其父线程?
我的应用程序如下所示:
public class Server {
private InititationServer initServer;
private ArrayList<Socket> workerSockets;
public Server() {
workerSockets = new ArrayList<Socket>();
initServer = new InitiationServer();
(new Thread(initServer)).start();
}
public static void main(String[] args) {
new Server();
}
//...
}
与
public class InitiationServer implements Runnable {
private ServerSocket initSocket;
//...
public void run()
while (true) {
Socket workerSocket = initSocket.accept();
// Add workerSocket to Server.workerSockets
}
}
//...
}
InitiationServer实现Runnable和ServerSocket。在run()中接受()的传入socket。如何将这些已接受的socket传递回服务器。以线程安全的方式使用workerSockets
非常感谢您的帮助
# 1 楼答案
您可以将
CopyOnWriteArrayList
用于workerSockets
,而不是ArrayList
,因为它是线程安全的或者您可以使用
workerSockets = Collections.synchronizedList(workerSockets);
您的列表将是线程安全的,但我建议您使用第一种方法而不是第二种方法CopyOnWriteArrayList
Collections.synchronizedList