Middle
Чӣ гуна метавон алоқаи маълумот байни ду сӯрохи дар Java ташкил дод?
sobes.tech AI
Ҷавоб аз AI
Роҳҳои мубодилаи маълумот байни сӯрохҳо дар Java метавонанд ба тариқҳои зерин ташкил карда шаванд:
- Параметрҳои умумӣ бо ҳамоҳангсозӣ: Сӯрохҳо параметрҳои умумиро истифода мебаранд, ки ба онҳо бо калиди
synchronized, блокҳо (Lockазjava.util.concurrent.locks) ё параметрҳои атомӣ (Atomicазjava.util.concurrent.atomic) дастрасӣ мешавад. - Конвейерҳои маълумот (Piped Streams): Пайвастшудаи даромад/баромадҳои дарунӣ (
PipedInputStreamваPipedOutputStream) имкон медиҳанд, ки як сӯрох маълумотро нависад, дар ҳоле ки дигар онро мехонад.// Истифодаи Piped Streams try { PipedOutputStream pout = new PipedOutputStream(); PipedInputStream pin = new PipedInputStream(pout); // Сӯрох 1: навишт new Thread(() -> { try { pout.write("Салом аз сӯрох 1".getBytes()); pout.close(); } catch (Exception e) { e.printStackTrace(); } }).start(); // Сӯрох 2: хондан new Thread(() -> { try { int data; while ((data = pin.read()) != -1) { System.out.print((char) data); } pin.close(); } catch (Exception e) { e.printStackTrace(); } }).start(); } catch (Exception e) { e.printStackTrace(); } - Захираҳо (Queues): Истифодаи коллексияҳои бехатари барои сӯрохҳо, монанди
BlockingQueue(масалан,ArrayBlockingQueue,LinkedBlockingQueue), имкон медиҳад, ки як сӯрох унсурҳоро ба захира гузорад ва дигарон онҳоро барорад.import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; // Истифодаи BlockingQueue BlockingQueue<String> queue = new LinkedBlockingQueue<>(); // Таъминкунанда new Thread(() -> { try { queue.put("Паём 1"); queue.put("Паём 2"); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } }).start(); // Истеъмолкунанда new Thread(() -> { try { System.out.println(queue.take()); System.out.println(queue.take()); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } }).start(); - Механизмҳои
wait(),notify(),notifyAll(): Истифода мешаванд барои ҳамоҳангсозии сӯрохҳо дар асоси мониторҳои объектҳо. Як сӯрохwait()-ро даъват мекунад, то дароз кунад, дар ҳоле ки дигарnotify()ёnotifyAll()-ро даъват мекунад, то огоҳ кунад сӯрохҳои интизорро дар бораи тағирёбии шароит.// Истифодаи wait/notify class Data { private String message; private boolean empty = true; public synchronized String read() { while (empty) { try { wait(); // интизорӣ барои маълумот } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } empty = true; notifyAll(); // огоҳӣ дар бораи имконияти навишт return message; } public synchronized void write(String message) { while (!empty) { try { wait(); // интизорӣ, то маълумоти қаблӣ хонда шавад } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } empty = false; this.message = message; notifyAll(); // огоҳӣ дар бораи маълумоти нав } } CompletableFuture: Имкон медиҳад, ки ҳисобҳои асинхронӣ эҷод ва натиҷаҳои онҳоро пайвандӣ кард, бо таъмин кардани мубодилаи маълумот тавассути арзишҳои баргардондашуда ва handlers-и анҷомёбӣ.Exchanger: Имкон медиҳад, ки ду сӯрох объектҳоро дар нуқтаи ҳамоҳангсозӣ мубодила кунанд.
Интихоби усули мушаххас ба хусусиятҳои вазифа, сатҳи зарурии ҳамоҳангсозӣ, иҷроиш ва мураккабии татбиқ вобаста аст.