如何控制很多java线程?

时间:2012-03-27 06:59:28

标签: java multithreading sockets

目前,我有一个用于监听端口的while循环。当套接字接受连接时,将创建实现runnable接口的任务,并将其分配给名为LinkedList的{​​{1}}以存储它。那就是让我控制,阻止他们。

o_allTaskThreads

但我在这里遇到了一些问题,如果 s = this.o_ServerSocket.accept(); System.out.println("connection established"); PortListenTask plt = new PortListenTask(s,this.o_config); this.o_allTaskThreads.add(plt); plt.run(); 已完成/已完成或异常终止,则无法更新linkedLIst PortListenTask,我该如何解决?感谢。

4 个答案:

答案 0 :(得分:2)

存储线程或作业的LinkedList不是一个好主意。 请尝试阅读此Thread pools和此Thread pools and workers,这可能有所帮助。

答案 1 :(得分:1)

当PortListenTask的run()方法结束(正常执行完成)时,它是否可以更新链表(我假设自行删除)呢?如果你在run()方法的内容周围添加一个try / catch处理程序,那么希望你可以捕获异常情况并帮助引导它们通过同一个干净的出口。你应该总是尝试发信号一个线程退出自己,而不是在外部中止它们,以允许这样一个干净的退出。

答案 2 :(得分:0)

你可以在每个PortListenTask中有一个布尔值来指示它是否仍然在运行,然后在循环通过线程时检查该布尔值,并在必要时使用remove(int index)将其从列表中删除。 您也可以将列表设置为静态,并从线程中删除列表中的条目。

答案 3 :(得分:0)

如果您使用的是较新版本的Java(jdk 6),请查看Future

如果您受到约束并想要一种替代方法,请尝试使用observer-observable模式。您可以使用'events'来实现相同目标。