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

溫馨提示×

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
河东区| 罗山县| 鸡泽县| 香格里拉县| 石渠县| 绍兴市| 德保县| 府谷县| 尖扎县| 汉阴县| 桂东县| 卫辉市| 沅陵县| 连城县| 海宁市| 阿拉善左旗| 修水县| 南涧| 黎平县| 阿城市| 兴海县| 郑州市| 同仁县| 吉首市| 玉树县| 丰镇市| 绥宁县| 荥经县| 陵水| 富裕县| 兴化市| 蒲江县| 炎陵县| 荥阳市| 井冈山市| 玉林市| 伊川县| 五华县| 乌兰察布市| 镇平县| 公主岭市|