Java多线程阻塞与唤醒问题实例

原创 男娘i 2024-09-19 04:21 181阅读 0赞

在Java多线程中,阻塞与唤醒是两种常见的同步机制。下面通过一个简单的生产者消费者(Producer-Consumer)模型来展示。

  1. 生产者(ProducerThread):

    1. class ProducerThread extends Thread {
    2. private int count = 0;
    3. public ProducerThread(String name) {
    4. super(name);
    5. }
    6. public void produce() {
    7. try {
    8. while (count <= 10) { // 每生产10个产品就暂停
    9. System.out.println("Producer produced: " + count++);
    10. // 延迟时间,模拟真实情况中的等待
    11. Thread.sleep(500);
    12. // 让消费者线程有机会处理
    13. synchronized (consumerLock) {
    14. consumerLock.notify();
    15. }
    16. } // 暂停循环
    17. } catch (InterruptedException e) {
    18. e.printStackTrace();
    19. }
    20. }
    21. }
  2. 消费者(ConsumerThread):

    1. class ConsumerThread extends Thread {
    2. private int count = 0;
    3. public ConsumerThread(String name) {
    4. super(name);
    5. }
    6. public void consume() {
    7. try {
    8. while (count <= 10) { // 当产品数量少于10时消费
    9. System.out.println("Consumer consumed: " + count++);
    10. // 让生产者线程有机会处理
    11. synchronized (producerLock) {
    12. producerLock.notify();
    13. }
    14. } // 消费循环
    15. } catch (InterruptedException e) {
    16. e.printStackTrace();
    17. }
    18. }
    19. }

    以上代码中,生产者(ProducerThread)会持续生产产品(每1秒生产一个),而消费者(ConsumerThread)则会消费这些产品。当产品数量少于10时,生产者和消费者都会暂停各自的操作,直到满足条件后继续执行。

通过这个例子,你可以看到阻塞与唤醒在Java多线程中的实际应用。

文章版权声明:注明蒲公英云原创文章,转载或复制请以超链接形式并注明出处。

发表评论

表情:
评论列表 (有 0 条评论,181人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Java线问题阻塞唤醒

    在Java多线程编程中,"阻塞"和"唤醒"是两个重要的概念。 1. 阻塞: 当一个线程调用某个方法或访问某个资源时,如果该资源当前已被其他线程占用,并且这个方法或者资源

    相关 Java线唤醒阻塞

    阻塞指的是暂停一个线程的执行以等待某个条件发生(如某资源就绪),学过操作系统的同学对它一 定已经很熟悉了。Java 提供了大量方法来支持阻塞,下面让我们逐一分析。 转载