Руководство по Java metanit com Данный раздел посвящен языку программирования Java и всем сопутствующим


Обмен между потоками. Класс Exchanger



Download 1,75 Mb.
Pdf ko'rish
bet85/110
Sana23.02.2022
Hajmi1,75 Mb.
#177154
TuriРуководство
1   ...   81   82   83   84   85   86   87   88   ...   110
Bog'liq
2 5305247065486395003

Обмен между потоками. Класс Exchanger
Класс Exchanger предназначен для обмена данными между потоками. Он является
типизированным и типизируется типом данных, которыми потоки должны обмениваться.
Обмен данными производится с помощью единственного метода этого класса exchange():
V exchange(V x) throws InterruptedException
V exchange(V x, long timeout, TimeUnit unit) throws InterruptedException,
TimeoutException
Параметр x представляет буфер данных для обмена. Вторая форма метода также определяет
параметр timeout - время ожидания и unit - тип временных единиц, применяемых для параметра
timeout.
Данный класс очень просто использовать:
import java.util.concurrent.Exchanger;
public class ThreadsApp {
public static void main(String[] args) {
Exchanger ex = new Exchanger();
new Thread(new PutThread(ex)).start();
new Thread(new GetThread(ex)).start();
}
}
class PutThread implements Runnable{
Exchanger exchanger;
String message;
PutThread(Exchanger ex){
this.exchanger=ex;
message = "Hello Java!";
}
public void run(){
try{
message=exchanger.exchange(message);
System.out.println("PutThread получил: " + message);
}
catch(InterruptedException ex){
System.out.println(ex.getMessage());
}
}
}
class GetThread implements Runnable{
Exchanger exchanger;
String message;
GetThread(Exchanger ex){
this.exchanger=ex;
message = "Привет мир!";
}
public void run(){
try{
message=exchanger.exchange(message);
System.out.println("GetThread получил: " + message);
}
catch(InterruptedException ex){
System.out.println(ex.getMessage());
}
}
}
В классе PutThread отправляет в буфер сообщение "Hello Java!":
message=exchanger.exchange(message);


Причем в ответ метод exchange возвращает данные, которые отправил в буфер другой поток.
То есть происходит обмен данными. Хотя нам необязательно получать данные, мы можем просто
их отправить:
exchanger.exchange(message);
Логика класса GetThread аналогична - также отправляется сообщение.
В итоге консоль выведет следующий результат:
PutThread получил: Привет мир!
GetThread получил: Hello Java!


Класс Phaser
Класс Phaser позволяет синхронизировать потоки, представляющие отдельную фазу или
стадию выполнения общего действия. Phaser определяет объект синхронизации, который ждет,
пока не завершится определенная фаза. Затем Phaser переходит к следующей стадии или фазе и
снова ожидает ее завершения.
Для создания объекта Phaser используется один из конструкторов:
Phaser()
Phaser(int parties)
Phaser(Phaser parent)
Phaser(Phaser parent, int parties)
Параметр parties указывает на количество сторон (грубо говоря, потоков), которые должны
выполнять все фазы действия. Первый конструктор создает объект Phaser без каких-либо сторон.
Второй конструктор регистрирует передаваемое в конструктор количество сторон. Третий и
четвертый конструкторы также устанавливают родительский объект Phaser.
Основные методы класса Phaser:

Download 1,75 Mb.

Do'stlaringiz bilan baham:
1   ...   81   82   83   84   85   86   87   88   ...   110




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish