中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

Java中join方法與wait方法的關系

小樊
83
2024-09-13 00:38:40
欄目: 編程語言

在Java中,join()wait()方法都用于線程間的通信和協作,但它們的用途和機制有所不同。

  1. join()方法: join()方法屬于Thread類,用于等待一個線程完成(終止)后,再繼續執行當前線程。當一個線程調用另一個線程的join()方法時,當前線程會被阻塞,直到被調用線程完成執行。這樣可以確保被調用線程的結果被當前線程正確處理。join()方法可以用于實現線程之間的同步和順序執行。

示例:

public class JoinExample {
    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(() -> {
            System.out.println("Thread 1 is running");
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("Thread 1 finished");
        });

        t1.start();
        t1.join(); // Main thread will wait for t1 to finish

        System.out.println("Main thread continues after t1 finished");
    }
}
  1. wait()方法: wait()方法屬于Object類,用于讓當前線程等待某個條件成立。當一個線程調用對象的wait()方法時,該線程會釋放對象的鎖并進入等待狀態。當其他線程調用相同對象的notify()notifyAll()方法時,等待狀態的線程將被喚醒。wait()方法通常與synchronized關鍵字一起使用,以實現線程間的同步和條件通知。

示例:

public class WaitNotifyExample {
    private final Object lock = new Object();

    public void producer() {
        synchronized (lock) {
            System.out.println("Producing data...");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("Data produced, notifying consumer");
            lock.notify(); // Notify the consumer thread
        }
    }

    public void consumer() {
        synchronized (lock) {
            while (true) {
                try {
                    lock.wait(); // Wait for data to be produced
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("Consuming data...");
                break;
            }
        }
    }

    public static void main(String[] args) {
        WaitNotifyExample example = new WaitNotifyExample();

        Thread producerThread = new Thread(example::producer);
        Thread consumerThread = new Thread(example::consumer);

        consumerThread.start();
        producerThread.start();
    }
}

總結:

  • join()方法用于等待一個線程完成,然后繼續執行當前線程。它屬于Thread類,用于實現線程間的同步和順序執行。
  • wait()方法用于讓當前線程等待某個條件成立。它屬于Object類,用于實現線程間的同步和條件通知。wait()方法通常與synchronized關鍵字和notify()/notifyAll()方法一起使用。

0
台前县| 定安县| 成武县| 延吉市| 托里县| 镇康县| 连城县| 府谷县| 惠安县| 惠水县| 休宁县| 深圳市| 灵武市| 镇远县| 大名县| 北安市| 东台市| 甘德县| 中牟县| 邹城市| 普宁市| 江西省| 临海市| 黑山县| 天津市| 阳春市| 正阳县| 调兵山市| 阳泉市| 宕昌县| 盐亭县| 汤阴县| 徐州市| 共和县| 西平县| 海晏县| 岳阳县| 富民县| 高阳县| 罗山县| 奉节县|