Sobes.tech
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: Имкон медиҳад, ки ду сӯрох объектҳоро дар нуқтаи ҳамоҳангсозӣ мубодила кунанд.

Интихоби усули мушаххас ба хусусиятҳои вазифа, сатҳи зарурии ҳамоҳангсозӣ, иҷроиш ва мураккабии татбиқ вобаста аст.