предайте коммуникацию потока земле в Java

Как делают потоки, которые полагаются друг на друга, связываются в Java?

Например, я создаю поисковый робот с потоками, которым нужны данные, которые прибывают из других потоков.

29
задан tipu 31 January 2010 в 04:05
поделиться

3 ответа

, который зависит от характера общения.

  • Это дуплекс (то есть переговоры с B и B разговора с a)?
  • это связь с данными или коммуникацией завершения ?

и так далее.

Самая простая и наиболее целесообразная форма взаимодоводской связи - просто ждать завершения других потоков. Это наиболее легко делается с использованием будущего :

ExecutorService exec = Executors.newFixedThreadPool(50);
final Future f = exec.submit(task1);
exec.submit(new Runnable() {
    @Override
    public void run() {
        f.get();
        // do stuff
    }
});

Вторая задача не будет выполняться до первого завершения.

Java 5+ имеет Многие одновременных коммунальных услуг для борьбы с такими вещами. Это может означать использование LinkedBlockingQueue S, CountDownlatch или многие другие.

Для углубленного обследования параллелизма Java Consullence на практике является обязательным чтением.

25
ответ дан 28 November 2019 в 01:26
поделиться

Взгляните на java.util.Observer/java.util.Observable. Это именно то, что вы ищете.

2
ответ дан 28 November 2019 в 01:26
поделиться

Можно использовать 2 Исполнительские услуги, отправить вызываемую реализацию в сервис А, который знает о последующих действиях по сервису Б. Когда вызываемый абонент завершил свою работу, он отправляет в сервис Б новое задание, которое делает что-то дополнительное с результатами.

Можно воспользоваться функцией CountDownLatch или каким-либо другим барьером, если необходимо выполнить дополнительную работу после того, как все элементы будут обработаны в обеих службах.

ExecutorService api довольно прямолинейна, по большей части вы, вероятно, будете использовать что-то вроде .newFixedThreadPool(int threads) и отправлять ему Runnables/Callables.

0
ответ дан 28 November 2019 в 01:26
поделиться
Другие вопросы по тегам:

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