首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问共享资源的线程数

访问共享资源的线程数
EN

Stack Overflow用户
提问于 2014-05-19 17:40:31
回答 3查看 3.6K关注 0票数 0

在Java采访中,我被问到‘在多线程中,应该做些什么才能让最多4个线程访问共享资源?’有人知道这个吗。谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-05-19 17:59:58

你是说并发4个线程吗?还是4个线程总数?

如果这是第一种选择(对我来说后者听起来毫无意义),您可以使用信号量(http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Semaphore.html)

有点像

代码语言:javascript
复制
public class YourResource {
   private static final int MAX_CONCURRENT_THREADS = 4;

   private Semaphore semaphore = new Semaphore(MAX_CONCURRENT_THREADS ); 

   public void doSomethingWithYourResource() {
      semaphore.acquire();
      try {
         // Code accessed by 4 concurrent threads, tops
      } finally {
         semaphore.release();
      }
   }
}
票数 3
EN

Stack Overflow用户

发布于 2014-05-19 17:53:01

使用线程池执行器创建4个最大线程。

代码语言:javascript
复制
ExecutorService executor = Executors.newFixedThreadPool(4);
        for (int i = 0; i < 4; i++) {
             Task task = new Task(someParam, someParam);
            executor.execute(task);
          }
        executor.shutdown();

其中任务是具有共享资源的类。

为了保护共享资源不受并发修改的影响,对共享资源进行同步。

票数 0
EN

Stack Overflow用户

发布于 2014-05-19 17:58:17

我既不被认为是java专家,也不是多线程专家,但我知道,例如,您可以使用工厂方法(如newFixedThreadPool(int nThreads) )来明确声明

在任何时候,最多的nThreads线程都是活动的处理任务。

不过,我的主要直觉是,正如“大卫·施瓦茨”所提到的,这只是一个选择主题和部署你的想法的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23743933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档