`
young-2017
  • 浏览: 9482 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

通过wait和notify实现线程之间的通讯

 
阅读更多
wait和notify是Object类中的方法,即java为所有的对象都提供了这两个方法
1. wait和notify必须和synchronized配合使用
2.wait方法释放锁 而 notify方法不释放锁


package com.example.threadDemo;

import java.util.ArrayList;
import java.util.List;

public class WaitAndNotify {

    private volatile static List list = new ArrayList();

    public void add() {
        list.add("a");
    }

    public int size() {
        return list.size();
    }

    public static void main(String[] args) {

        final WaitAndNotify waitAndNotify = new WaitAndNotify();
        final Object lock = new Object();

        Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    synchronized (lock) {
                        for (int i = 0; i < 10; i++) {
                            waitAndNotify.add();
                            System.out.println("当前线程"+ Thread.currentThread().getName() + "添加了一个元素");
                            Thread.sleep(500);
                            if(waitAndNotify.size() == 5){
                                //此时虽然发出通知,但是不释放lock这把锁
                                System.out.println("发出通知。。。");
                                lock.notify();
                            }
                        }
                    }
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

            }
        },"t1");


        Thread t2 = new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (lock){
                    if(waitAndNotify.size() != 5){
                        try {
                            //释放lock锁
                            lock.wait();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                    System.out.println("当前线程:"+
                    Thread.currentThread().getName() + "收到通知线程停止。。。");
                    throw new RuntimeException();
                }
            }
        },"t2");

        t2.start();
        t1.start();
    }

}



分享到:
评论

相关推荐

    Java 同步方式 wait和notify/notifyall

    在Java中,`wait()`, `notify()`, 和 `notifyAll()` 是Java Object类的三个方法,它们在实现线程间通信和协作时扮演着关键角色。这些方法主要用于解决线程等待和唤醒的问题,是基于Java Monitor(监视器)模型的。 ...

    Java多线程wait和notify

    在Java中,`wait()` 和 `notify()` 方法是实现线程间通信和协作的重要工具,它们属于 `java.lang.Object` 类,这意味着所有类都默认继承了这两个方法。本文将详细探讨如何使用 `wait()` 和 `notify()` 来控制子线程...

    wait,notify等线程知识.pdf

    Java中的多线程协同工作是通过一系列的同步机制来实现的,其中wait、notify和notifyAll是基于对象监视器的同步原语。这些方法在Java的Object类中定义,主要用于线程间的通信和协作,确保资源的安全访问。下面将详细...

    java之wait,notify的用法([ 详解+实例 ])

    在Java多线程编程中,wait和notify是两个非常重要的方法,它们都是Object类的方法,用于线程之间的通信和同步。下面我们将详细解释wait和notify的用法。 wait方法 wait方法是Object类的一个方法,用于让当前线程...

    36.线程间的通信-wait与notify-不使用wait与notifty实现线程间通讯有什么问题.mp4

    在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。

    java线程-保护性暂停(wait,notify实现).docx

    Java 线程保护性暂停(wait,notify 实现) ...本文详细讲解了 Java 线程中的保护性暂停机制,即 wait 和 notify 方法的实现,并提供了一个实际的示例代码,演示如何使用保护性暂停机制来实现线程之间的通信。

    41.线程间的通信-wait与notify-只唤醒一个线程或所有线程.mp4

    在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。

    wait_notify_demo

    `wait()`、`notify()`和`notifyAll()`是Java中的三个关键字,它们属于Object类的方法,主要用于线程间的通信,尤其在实现生产者消费者模式时发挥着重要作用。本文将深入探讨这些方法以及如何在实际场景中应用它们。 ...

    主线程去控制子线程wait与notify

    总的来说,主线程控制子线程的`wait()`和`notify()`操作是Java并发编程中的高级技巧,它允许我们构建更复杂、更高效的应用程序,通过线程间的协作来解决问题。理解和掌握这些概念对于编写高并发、高性能的Java应用...

    一个理解wait()与notify()的例子

    ### 一个理解wait()与notify()的例子 #### 知识点概述 本文旨在解析一个具体的Java多线程示例代码,以...这两个方法通过释放和重新获取锁的方式,有效地实现了线程间的通信和同步,是Java并发控制的重要组成部分。

    深入理解Wait、Notify和Wait与sleep区别

    首先,`wait()`, `notify()`和`notifyAll()`是Object类中的方法,它们主要用于线程间通信和协作。这些方法只能在同步环境中(如`synchronized`块或方法)使用,否则会抛出`IllegalMonitorStateException`。它们的...

    java中几个notify、wait使用实例

    在Java的多线程编程中,`notify()`与`wait()`是实现线程间通信的重要方法,它们主要用于解决生产者消费者问题、读者写者问题等典型同步问题。这两个方法定义在`Object`类中,因此所有Java对象都可以作为锁来使用。在...

    Java的sychronized、wait和notify范例

    `synchronized`关键字、`wait()`和`notify()`方法是Java多线程中用于控制并发访问共享资源的重要工具,它们是Java内存模型(JMM)的一部分,主要用于解决线程间的同步问题。 一、`synchronized`关键字 `...

    浅谈java多线程wait,notify

    在Java多线程编程中,wait和notify是两个非常重要的机制,用于实现线程之间的通信和同步。在本文中,我们将通过示例代码详细介绍Java多线程wait和notify的使用,帮助读者更好地理解和掌握这两个机制。 wait机制 在...

    如何在Java中正确使用 wait, notify 和 notifyAll

     在 Java 中可以用 wait、notify 和 notifyAll 来实现线程间的通信。。举个例子,如果你的Java程序中有两个线程——即生产者和消费者,那么生产者可以通知消费者,让消费者开始消耗数据,因为队列缓冲区中有内容待...

    42.线程间的通信-wait与notify-wait(long)的使用.mp4

    在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。

    源码—Java多线程5—死锁和wait notify notifyAll

    源码—Java多线程5—死锁和wait notify notifyAll

    Java多线程通讯之wait,notify的区别详解

    Java多线程通讯是指在多线程编程中,线程之间如何进行通讯和同步的问题。其中,wait和notify是两个非常重要的方法,用于控制线程的状态和同步。 wait方法: wait方法是Object类中的方法,用于使当前线程等待某个...

    多线程同步和通讯完整示例

    本文将深入探讨这些概念,以及如何使用synchronized关键字、wait-notify机制和Lock接口来实现线程间的同步与通讯。 首先,多线程是指在一个程序中同时运行多个独立的执行线程,每个线程都有自己的程序计数器、系统...

Global site tag (gtag.js) - Google Analytics