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

溫馨提示×

java 新建線程怎樣處理線程等待

小樊
81
2024-11-29 17:01:57
欄目: 編程語言

在Java中,處理線程等待的方法有很多種。這里,我將向您展示如何使用wait()notify()方法來處理線程等待。這兩個方法都是Object類的方法,因此所有的Java對象都可以使用它們。

首先,我們需要創建一個共享資源,例如一個整數變量,以便在線程之間進行通信。我們將使用synchronized關鍵字來確保在同一時間只有一個線程可以訪問這個資源。

public class SharedResource {
    private int counter = 0;

    public synchronized void increment() {
        counter++;
        System.out.println(Thread.currentThread().getName() + " incremented counter to: " + counter);
        notifyAll(); // 通知等待的線程
    }

    public synchronized void decrement() {
        counter--;
        System.out.println(Thread.currentThread().getName() + " decremented counter to: " + counter);
        notifyAll(); // 通知等待的線程
    }

    public synchronized int getCounter() {
        return counter;
    }
}

接下來,我們將創建兩個線程類,一個用于遞增計數器,另一個用于遞減計數器。在這兩個類中,我們將使用wait()方法來讓線程等待,直到另一個線程調用notifyAll()方法。

public class IncrementThread extends Thread {
    private SharedResource sharedResource;

    public IncrementThread(SharedResource sharedResource) {
        this.sharedResource = sharedResource;
    }

    @Override
    public void run() {
        while (true) {
            synchronized (sharedResource) {
                while (sharedResource.getCounter() >= 10) {
                    try {
                        System.out.println(Thread.currentThread().getName() + " is waiting...");
                        sharedResource.wait(); // 讓當前線程等待
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                sharedResource.increment();
            }
        }
    }
}

public class DecrementThread extends Thread {
    private SharedResource sharedResource;

    public DecrementThread(SharedResource sharedResource) {
        this.sharedResource = sharedResource;
    }

    @Override
    public void run() {
        while (true) {
            synchronized (sharedResource) {
                while (sharedResource.getCounter() <= 0) {
                    try {
                        System.out.println(Thread.currentThread().getName() + " is waiting...");
                        sharedResource.wait(); // 讓當前線程等待
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                sharedResource.decrement();
            }
        }
    }
}

最后,我們需要在main()方法中創建這些線程并啟動它們。

public class Main {
    public static void main(String[] args) {
        SharedResource sharedResource = new SharedResource();
        IncrementThread incrementThread = new IncrementThread(sharedResource);
        DecrementThread decrementThread = new DecrementThread(sharedResource);

        incrementThread.start();
        decrementThread.start();
    }
}

這個示例中,IncrementThreadDecrementThread線程將不斷地遞增和遞減共享資源counter。當一個線程試圖執行操作時,如果counter不滿足條件(例如,遞增線程試圖遞增計數器,但計數器已經達到10),則線程將調用wait()方法并進入等待狀態。另一個線程執行操作并調用notifyAll()方法時,等待的線程將被喚醒并繼續執行。

0
杭州市| 阜城县| 兴义市| 德保县| 河北省| 卢湾区| 巴南区| 康乐县| 静宁县| 清徐县| 普陀区| 左权县| 油尖旺区| 长白| 白银市| 永德县| 肥东县| 银川市| 平潭县| 镇沅| 锡林郭勒盟| 灵山县| 鹿泉市| 新兴县| 房产| 南丰县| 灵宝市| 墨脱县| 女性| 河曲县| 杭锦旗| 五寨县| 武强县| 镇宁| 沙田区| 紫阳县| 志丹县| 绿春县| 石棉县| 浦城县| 禄劝|