Я новичок в параллельном программировании и пытаюсь реализовать простой ThreadPool самостоятельно. Я нашел эту реализацию на обучающем веб-сайте (jenkov.com), и она, кажется, работает нормально.
Однако я думаю, что потоки и isStopped должны быть на уровне наименее изменчивы в классе PoolThreadRunnable или переменных Atomic, поскольку они совместно используются двумя потоками: тот, который запускает метод для объекта (где isStopped=true и this.thread. прерывание()) и тот, в котором выполняется фактический код запуска (где мы делаем this.thread=Thread.currentThread() и while(!isStopped()) .
Правильно ли я понимаю или я что-то упускаю?
public class ThreadPool {
private BlockingQueue taskQueue = null;
private List runnables = new ArrayList();
private boolean isStopped = false;
public ThreadPool(int noOfThreads, int maxNoOfTasks){
taskQueue = new ArrayBlockingQueue(maxNoOfTasks);
for(int i=0; i 0) {
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class PoolThreadRunnable implements Runnable {
private Thread thread = null;
private BlockingQueue taskQueue = null;
private boolean isStopped = false;
public PoolThreadRunnable(BlockingQueue queue){
taskQueue = queue;
}
public void run(){
this.thread = Thread.currentThread();
while(!isStopped()){
try{
Runnable runnable = (Runnable) taskQueue.take();
runnable.run();
} catch(Exception e){
//log or otherwise report exception,
//but keep pool thread alive.
}
}
}
public synchronized void doStop(){
isStopped = true;
//break pool thread out of dequeue() call.
this.thread.interrupt();
}
public synchronized boolean isStopped(){
return isStopped;
}
}
Подробнее здесь: https://stackoverflow.com/questions/787 ... on-correct
Правильна ли эта реализация ThreadPool? ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Mvn -v Переменная среды JAVA_HOME определена неправильно, но она уже правильна
Anonymous » » в форуме JAVA - 0 Ответы
- 14 Просмотры
-
Последнее сообщение Anonymous
-