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

溫馨提示×

Java SyncContainerHb類使用實例

小億
74
2023-12-19 04:33:55
欄目: 編程語言

以下是一個使用SyncContainerHb類的Java示例:

import java.util.concurrent.TimeUnit;

public class SyncContainerHbExample {
  
    public static void main(String[] args) {
        SyncContainerHb<String> container = new SyncContainerHb<>();
        
        Thread producerThread = new Thread(() -> {
            try {
                container.put("Hello");
                container.put("World");
                container.put("!");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });
        
        Thread consumerThread = new Thread(() -> {
            try {
                TimeUnit.SECONDS.sleep(2); // 等待2秒
                System.out.println(container.get());
                System.out.println(container.get());
                System.out.println(container.get());
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });
        
        producerThread.start();
        consumerThread.start();
    }
}

在這個例子中,我們創建了一個SyncContainerHb對象,并在生產者線程中放置了三個字符串。然后,在消費者線程中,我們等待2秒后從容器中獲取這三個字符串,并打印輸出它們。

SyncContainerHb類的實現如下:

import java.util.LinkedList;
import java.util.Queue;

public class SyncContainerHb<T> {
  
    private Queue<T> container = new LinkedList<>();
  
    public synchronized void put(T element) throws InterruptedException {
        while (container.size() >= 1) {
            wait(); // 如果容器已滿,則等待
        }
        container.offer(element);
        notifyAll(); // 通知其他線程可以從容器中獲取元素了
    }
  
    public synchronized T get() throws InterruptedException {
        while (container.isEmpty()) {
            wait(); // 如果容器為空,則等待
        }
        T element = container.poll();
        notifyAll(); // 通知其他線程可以向容器中放置新元素了
        return element;
    }
}

SyncContainerHb類使用了Java的內置對象監視器(Intrinsic Locks)來實現同步。容器使用LinkedList來存儲元素,并通過synchronized關鍵字來保證在放置和獲取元素時的線程安全性。在put()方法和get()方法中,使用wait()方法來暫停線程的執行,直到某個條件滿足。當容器已滿時,生產者線程會調用wait()方法等待,直到消費者線程從容器中獲取了一個元素并調用notifyAll()方法喚醒它;當容器為空時,消費者線程會調用wait()方法等待,直到生產者線程放置了一個元素并調用notifyAll()方法喚醒它。這樣,生產者和消費者線程就可以安全地共享容器了。

0
临沧市| 杭州市| 西乡县| 南岸区| 沙湾县| 云南省| 徐州市| 子长县| 泸州市| 哈尔滨市| 湟中县| 楚雄市| 吉林市| 玉溪市| 濉溪县| 四会市| 曲周县| 枣阳市| 县级市| 宝应县| 曲阜市| 治县。| 双柏县| 韶关市| 望江县| 太湖县| 普陀区| 泰来县| 花莲市| 康马县| 贺州市| 七台河市| 虹口区| 区。| 平舆县| 四子王旗| 娱乐| 商丘市| 平泉县| 唐河县| 寿阳县|