亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

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
即墨市| 双牌县| 平塘县| 沁阳市| 陆良县| 垣曲县| 台南县| 丹阳市| 迁安市| 察雅县| 信丰县| 景谷| 建平县| 比如县| 龙江县| 邵阳市| 布尔津县| 宁陕县| 旅游| 高平市| 招远市| 海林市| 云阳县| 环江| 古田县| 汝城县| 肥西县| 繁峙县| 崇礼县| 通辽市| 香格里拉县| 汝阳县| 黑山县| 平昌县| 宝应县| 五寨县| 潞城市| 峨眉山市| 南汇区| 乡城县| 蛟河市|