【发布时间】:2013-01-11 22:34:09
【问题描述】:
我想和你分享我的想法。
考虑你必须自己实现一个线程池。
我认为它有一些成员字段,例如 Threads 的private static List<Thread> 作为我的“池”。
我也有两种方法:
一种。从池中分配线程。
湾。它将一个线程返回到池中。
我的问题是:
1.如何保护List不被某些线程同时访问:
我想用synchronize 声明这两种方法,然后购买意识到这不好,因为我无法执行以下操作:
将一个线程返回到池中,同时从池中取出一个。
我也想过使用像 Vector 这样的线程安全集合,但似乎也有同样的问题。
2.你认为线程池类应该是Singleton吗?您认为代码的哪一部分应该负责分配它的单个实例?
【问题讨论】:
-
为什么要多个线程访问
List<Thread>? -
因为如果我想从池中获取一些线程,同时另一个线程想被释放,它们将被排队而不是同时处理。假设我已经有一些空闲线程,那么它将从集合中获取线程-现在我们被阻塞了,只有在这结束之后,我们才能将一个线程释放回池
-
我认为如果你把问题转过来会更容易。不是分发线程,而是接受实现某个接口的对象,选择一个线程并让它执行对象指定的方法。然后您可以轻松捕获可能已终止线程的异常,创建新线程,不必担心恢复线程等。
-
可以阅读javadoc,直接使用java给出的线程池即可。自 1.5 以来它是 java sdk 的一部分 - 你可以获取 java 源代码。
-
@JavaSa:您只会在分发线程的一小段时间内锁定,然后在线程返回池的一小段时间内锁定。正确的?还是您认为锁定会保留更长时间?
标签: java design-patterns concurrency synchronization threadpool