Java多线程中的wait与notify
一、wait:
1. wait 是 object 类的方法, sleep 是 thread 类的方法.
2. 当前的正在我这个对象访问的线程 wait.
3. 当前的这个线程, 锁定在当前对象的这个线程停止住.
4. 只有锁定后, 才能有wait; 如果不是 synchronized, 直接调用 wait, 立马出错.
二、锁的问题:
1. 原来不是拥有这个对象的锁吗? 一旦 wait ,立马就死了, 这个对象的锁就不再归我所有, 只有醒过来的时候, 我才会再找这把锁, 把它找回来.
三、wait 与 sleep 的区别:
1. wait 的时候, 锁就不再给我所有.
2. sleep 的时候, 睡着了也抱着那把锁, 它比较贪婪.
四、notify:
1. this.notify 叫醒一个现在正在 wait 在我这个对象上的线程, 谁现在正在我的这个对象上等待, 我就叫醒一个线程, 让它继续执行.
五、wait 什么时候用:
发生了一个阻塞事件, 已经满了, 这个时候我只能 wait, 而且我不知道我要 wait 多长时间. 所以就一睡不起, 什么时候我就醒了呢?
当前对象有人调用了 notify(), 我就醒了, 我就继续执行. 但是, 你即使执行过来的时候, 哪怕你被打断了, 你也必须检查现在是不是
还在阻塞状态, 若还是阻塞, 就继续睡. 睡醒的第一件事, 就是把其他的线程也叫醒, 然后再做自己的事(多线程同步).
Java多线程中的wait与notify的更多相关文章
- java多线程中最佳的实践方案是什么?
java多线程中最佳的实践方案是什么? 给你的线程起个有意义的名字.这样可以方便找bug或追踪.OrderProcessor, QuoteProcessor or TradeProcessor 这种名 ...
- java多线程15 :wait()和notify() 的生产者/消费者模式
什么是生产者/消费者模型 一种重要的模型,基于等待/通知机制.生产者/消费者模型描述的是有一块缓冲区作为仓库,生产者可将产品放入仓库,消费者可以从仓库中取出产品,生产者/消费者模型关注的是以下几个点: ...
- java多线程通信方式之一:wait/notify
java多线程之间的通信方式有多种: 1.wait(),notify(),notifyAll()方法;2.join()方法;3.通过volatile共享内存的方式进行线程通信的;4.interrupt ...
- Java多线程中的常用方法
本文将带你讲诉Java多线程中的常用方法 Java多线程中的常用方法有如下几个 start,run,sleep,wait,notify,notifyAll,join,isAlive,current ...
- java多线程中的三种特性
java多线程中的三种特性 原子性(Atomicity) 原子性是指在一个操作中就是cpu不可以在中途暂停然后再调度,既不被中断操作,要不执行完成,要不就不执行. 如果一个操作时原子性的,那么多线程并 ...
- java 多线程中的wait方法的详解
java多线程中的实现方式存在两种: 方式一:使用继承方式 例如: PersonTest extends Thread{ String name; public PersonTest(String n ...
- java多线程中并发集合和同步集合有哪些?区别是什么?
java多线程中并发集合和同步集合有哪些? hashmap 是非同步的,故在多线程中是线程不安全的,不过也可以使用 同步类来进行包装: 包装类Collections.synchronizedMap() ...
- Java多线程中的竞争条件、锁以及同步的概念
竞争条件 1.竞争条件: 在java多线程中,当两个或以上的线程对同一个数据进行操作的时候,可能会产生“竞争条件”的现象.这种现象产生的根本原因是因为多个线程在对同一个数据进行操作,此时对该数据的操作 ...
- Java多线程中的死锁
Java多线程中的死锁 死锁产生的原因 线程死锁是指由两个以上的线程互相持有对方所需要的资源,导致线程处于等待状态,无法往前执行. 当线程进入对象的synchronized代码块时,便占有了资源,直到 ...
随机推荐
- MongoDB 数据类型查询 — $type使用
MongoDB 使用过程中经常需要根据字段的类型来查询数据, 而MongoDB中查询字段类型是通过$type操作符来实现. $type使用法语: db.集合名.find({$type:类型值}); / ...
- Windos10 mysql-8.0.13安装手顺
一.下载 1.1 官方下载地址:https://dev.mysql.com/downloads/mysql/ ,点击Download 1.2 点击 No thanks,just start my do ...
- kubernetes命令式容器应用编排/部署应用/探查应用详情/部署service对象/扩缩容/修改删除对象
部署Pod应用 创建delpoyment控制器对象 [root@master ~]# kubectl run myapp --image=ikubernetes/myapp:v1 --port=80 ...
- 监控生产线上服务器的docker容器及主机
1. 部署cadvisor容器,用来收集host上的容器信息,该容器部署在需要收集容器信息的每一个主机上部署: docker run -v /:/rootfs:ro -v /var/run:/var ...
- BurpSuite—-Target模块(目标模块)
Target功能 目标工具包含了SiteMap,用你的目标应用程序的详细信息.它可以让你定义哪些对象在范围上为你目前的工作,也可以让你手动测试漏洞的过程,Target分为site map和scope两 ...
- skyline画折现bug代码
<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>加 ...
- 脱离matlab运行可执行程序的步骤
MCR是由matlab的运行环境,占用不到600M的对于用不同matlab版本生成的exe文件,MCR版本也会有不同,因此,在程序打包时,最好将相应版本的MCR一起打包.MCR环境的设置文件存放目录如 ...
- 2016-2017-2 20155322 实验三 敏捷开发与XP实践
2016-2017-2 20155322 实验三 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 实验知识点 敏捷开发(Agile Development)是一种以人为核心.迭代.循序 ...
- 20155339 2016-2017-2 《Java程序设计》第1周学习总结
20155339 2016-2017-2 <Java程序设计>第1周学习总结 教材学习内容总结 第一章 一直以为JAVA应该只是一种语言,研读了书本之后发现原来JAVA也代表了解决问题的平 ...
- OpenCV参考手册之Mat类详解
OpenCV参考手册之Mat类详解(一) OpenCV参考手册之Mat类详解(二) OpenCV参考手册之Mat类详解(三)