91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

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
余庆县| 岢岚县| 江源县| 铜陵市| 大英县| 丰台区| 山东| 韩城市| 金沙县| 柞水县| 长寿区| 治县。| 婺源县| 安新县| 马山县| 太原市| 阳谷县| 蓬溪县| 类乌齐县| 南漳县| 嘉义市| 阿荣旗| 东阿县| 云浮市| 五家渠市| 东丽区| 凤山市| 平山县| 吉木萨尔县| 和田市| 彝良县| 柘城县| 绥芬河市| 苏州市| 裕民县| 宾川县| 惠州市| 黄浦区| 浪卡子县| 郓城县| 蓬安县|