Java поток ждать и уведомлять

Для тех из вас, как я, ищущих вперед, объявляют структуру C-стиля, которая была определена с помощью typedef, в некотором c ++-коде, я нашел решение, которое выглядит следующим образом ...

// a.h
 typedef struct _bah {
    int a;
    int b;
 } bah;

// b.h
 struct _bah;
 typedef _bah bah;

 class foo {
   foo(bah * b);
   foo(bah b);
   bah * mBah;
 };

// b.cpp
 #include "b.h"
 #include "a.h"

 foo::foo(bah * b) {
   mBah = b;
 }

 foo::foo(bah b) {
   mBah = &b;
 }
10
задан Michael Myers 5 May 2009 в 18:40
поделиться

2 ответа

Использовать BlockingQueue , а именно:

A Очередь , которая дополнительно поддерживает операции, ожидающие, пока очередь не станет пустой при получении элемент, и подождите, пока место станет доступным в очереди при хранении элемента.

Серьезно, не пытайтесь изобретать колесо здесь.




(Если вы должны использовать ожидание / уведомление, прочитайте это руководство . Но избавьте себя от боли, пожалуйста!)

21
ответ дан 3 December 2019 в 17:22
поделиться

Вот некоторые подробности:

import java.concurrent.Executors;
import java.concurrent.ExecutorService;
...
ExecutorService executor = Executors.newFixedThreadPool(someNumberOfThreads);
...
executor.execute(someObjectThatImplementsRunnable);
...
executor.shutdownNow();

Вот и все, что нужно сделать с помощью новых возможностей Java для многопоточности. Executor - это пул потоков с некоторым количеством NumberOfThreads. Питается блокирующей очередью. Все темы спят, если нет работы. Когда вы помещаете объект Runnable в очередь с помощью метода execute (), объект Runnable остается в очереди до тех пор, пока не станет доступным поток для его обработки. Затем вызывается метод run (). Наконец, метод shutdownNow () сигнализирует о закрытии всех потоков в пуле.

Теперь это намного проще, чем раньше.

(Существует множество вариаций, таких как пулы с минимальным и максимальным числом потоки или очереди, которые имеют максимальные размеры, прежде чем потоки, вызывающие execute (), заблокируются.)

2
ответ дан 3 December 2019 в 17:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: