在Java访谈中,我被问及在多线程中,应该做些什么才能在最多4个线程上访问共享资源?' 有人知道吗感谢
答案 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提到的那样,只是选择主题并展开你的想法是一个问题。