访问共享资源的线程数

时间:2014-05-19 17:40:31

标签: java multithreading

在Java访谈中,我被问及在多线程中,应该做些什么才能在最多4个线程上访问共享资源?' 有人知道吗感谢

3 个答案:

答案 0 :(得分:2)

你的意思是并发4个线程吗?或总共4个线程?

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

这样的东西
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();
      }
   }
}

答案 1 :(得分:0)

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

ExecutorService executor = Executors.newFixedThreadPool(4);
        for (int i = 0; i < 4; i++) {
             Task task = new Task(someParam, someParam);
            executor.execute(task);
          }
        executor.shutdown();

其中task是某个具有共享资源的类。

并保护共享资源免受并发修改的影响,同步该共享资源。

答案 2 :(得分:0)

我既不是Java专家也不是多线程专家,但我知道您可以使用newFixedThreadPool(int nThreads)之类的工厂方法明确指出

  

在任何时候,最多nThreads线程都将处于活动状态   任务。

我的主要直觉是,正如@David Schwartz提到的那样,只是选择主题并展开你的想法是一个问题。