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

溫馨提示×

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
嫩江县| 新竹市| 大悟县| 开平市| 伊宁市| 神农架林区| 原阳县| 井陉县| 旬邑县| 抚顺县| 民勤县| 永春县| 柯坪县| 南平市| 武鸣县| 宾川县| 迁安市| 吉林省| 全州县| 贵定县| 闻喜县| 蓬莱市| 三原县| 岗巴县| 白沙| 双柏县| 称多县| 改则县| 邵阳县| 惠州市| 肥乡县| 武隆县| 余干县| 平乡县| 吴川市| 定西市| 双牌县| 灵石县| 泗洪县| 潮州市| 呈贡县|