Правильна ли эта реализация 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 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Правильна ли эта реализация ThreadPool?
    Anonymous » » в форуме JAVA
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Реализация шаблона Builder на C# – правильна ли моя реализация?
    Anonymous » » в форуме C#
    0 Ответы
    31 Просмотры
    Последнее сообщение Anonymous
  • Существуют ли ограничения на значения, которые мы можем установить для ThreadPool.SetMinThreads и ThreadPool.SetMaxThrea
    Anonymous » » в форуме C#
    0 Ответы
    34 Просмотры
    Последнее сообщение Anonymous
  • Правильна ли эта подпись взаимодействия p/invoke для функции libc poll()?
    Anonymous » » в форуме C#
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Mvn -v Переменная среды JAVA_HOME определена неправильно, но она уже правильна
    Anonymous » » в форуме JAVA
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous

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