Я новичок в параллельном программировании и пытаюсь реализовать простой 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
Программисты JAVA общаются здесь
1720285710
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;
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78715348/is-this-threadpool-implementation-correct[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия