Java SyncContainerHb类使用实例

   2025-02-13 5720
核心提示:以下是一个使用SyncContainerHb类的Java示例:import java.util.concurrent.TimeUnit;public class SyncContainerHbExample {pub

以下是一个使用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()方法唤醒它。这样,生产者和消费者线程就可以安全地共享容器了。

 
 
更多>同类维修知识
推荐图文
推荐维修知识
点击排行
网站首页  |  关于我们  |  联系方式  |  用户协议  |  隐私政策  |  网站留言