在Java采访中,我被问到‘在多线程中,应该做些什么才能让最多4个线程访问共享资源?’有人知道这个吗。谢谢
发布于 2014-05-19 17:59:58
你是说并发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();
}
}
}发布于 2014-05-19 17:53:01
使用线程池执行器创建4个最大线程。
ExecutorService executor = Executors.newFixedThreadPool(4);
for (int i = 0; i < 4; i++) {
Task task = new Task(someParam, someParam);
executor.execute(task);
}
executor.shutdown();其中任务是具有共享资源的类。
为了保护共享资源不受并发修改的影响,对共享资源进行同步。
发布于 2014-05-19 17:58:17
我既不被认为是java专家,也不是多线程专家,但我知道,例如,您可以使用工厂方法(如newFixedThreadPool(int nThreads) )来明确声明
在任何时候,最多的nThreads线程都是活动的处理任务。
不过,我的主要直觉是,正如“大卫·施瓦茨”所提到的,这只是一个选择主题和部署你的想法的问题。
https://stackoverflow.com/questions/23743933
复制相似问题