Связь между потоками - PullRequest
       1

Связь между потоками

3 голосов
/ 11 февраля 2012

Самая простая реализация - это когда мы вызываем из основного метода одного класса другие классы, реализующие runnable:

 public static void main(String [] args){

    // declarations ...


    receiver.start();
    player.start();


 }

Скажем, внутри получателя у меня есть цикл while, который получает значение пакета, и я хочу отправить это значение во второй поток. Как это сделать?

Просто чтобы прояснить, что меня пока не волнует, что один поток контролирует другой, я просто хочу, чтобы первый поток делился значениями со вторым.

И небольшой вопрос в стороне - действительно ли JDK 7 Fork значительно повышает производительность для java concurrent api?

Спасибо за ваше время,

Ответы [ 2 ]

4 голосов
/ 11 февраля 2012

Простой вариант - использовать java.util.concurrent.atomic.AtomicReference (или один из других Atomic... классов ).Создайте отдельный экземпляр AtomicReference и передайте его коду, выполняемому различными потоками, и установите значение из потока получателя.Затем другие потоки могут читать значение в свое свободное время в поточно-ориентированном режиме.

действительно ли JDK 7 Fork значительно повышает производительность для Java-параллельных API?

Нет, это просто новый API для упрощения некоторых вещей.Это не для того, чтобы сделать вещи быстрее.

1 голос
/ 11 февраля 2012

java.util.concurrent -пакет содержит множество полезных интерфейсов и классов для безопасного взаимодействия между потоками. Я не уверен, что понимаю ваш вариант использования здесь, но если ваш player (производитель) должен передать задачи receiver (потребителю), вы можете, например, использовать BlockingQueue - осуществление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...