在Java采访中,我被问到"在多线程中,应该做些什么才能使共享资源最多被4个线程访问?"有人知道吗?由于
你是说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();
}
}
}
使用线程池执行器创建最多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是某个共享资源的类。
我既不是java专家也不是多线程专家但我知道你可以使用newFixedThreadPool(int nThreads)
这样的工厂方法来明确声明
在任何时候,最多有nThreads线程处于活动处理状态任务。
我的主要直觉是,正如@David Schwartz提到的,这只是一个选择主题和部署你的想法的问题。