我有一个固定号码n
需要在n
或更多线程之间共享相同的资源。无论何时线程需要使用某个资源,它都可以使用任何可用的资源,为此它运行的时间不确定(即使用时间不均匀),然后释放它。在多个线程之间共享和锁定固定数量的资源
什么是良好的Java数据结构来管理这种情况?我只能想到一种办法,分别使用LinkedBlockingQueue
和take
和put
作为锁定和释放资源。我只想从并发专家那里得到一个建议:
对于那些好奇的人:需要共享的资源是用于计算多元正态CDF和时刻的non-reentrant FORTRAN library的相同副本。壮观的数字图书馆,但写在一个线程安全的代码是不值得担心的时代。在这种情况下,我们制作n
库的副本,其中n = Runtime.getRuntime().availableProcessors()
。
编辑:我不想创建线程的开销来执行这个库。它已经被多个线程调用;调用线程应该能够锁定资源并继续使用它。
UPDATE:请参阅https://stackoverflow.com/a/19039878/586086的动机和实施。
您可以只创建N个任务添加到一个固定大小的线程池。 –
@PeterLawrey在我的情况下,我希望任务从启动它们的线程的角度同步运行。将作业传递给不同的线程会带来什么好处? –
“同步”是指一个又一个?在这种情况下,你只需要一个线程。使用多线程的好处是它们可以同时执行,因此花费的时间更少。 –