Правильна ли эта реализация ThreadPool?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Правильна ли эта реализация ThreadPool?

Сообщение Anonymous »

Я новичок в параллельном программировании и пытаюсь реализовать простой 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»