在学习多线程的时候,你无法逃避sleep、wait、notify、notifyAll的关键字,我们肯定是对sleep用的最多,即使你写个Demo也要经常用到Thread.sleep(xxx)模拟等待的效果,没错吧。等等,这里一道面试题来了,sleep和wait都可以表示等待,那么这两个方法有什么区别呢? 有的人不知道啥区别,他们第一反应就是搜一下,我以前就是这样的。其实吧,一个较好的方法就是看官方是怎么解释的,还有什么比这个还要权威吗? 要么就是自行Google,看看英文文档也不错,还可以提高英一下文水平,是吧。关于程序员怎么提高英文水平,我以后会专门写篇文章来讲一讲,PS:本人大学英文过了六级,毕业后我每周都花点时间学习一下,对,是每周,一直至今,所以英文水平还是不错的,目前看英文IT文档基本无障碍。

废话不多说,直接上代码

import java.util.Scanner;

public class Worker5 {

    public void action1() throws InterruptedException {
synchronized (this) {
System.out.println("有人在试衣间吗?哥要试试这性感的背心 ");
wait();
System.out.println("好的,我进来了");
}
} public void action2() throws InterruptedException {
Scanner scanner = new Scanner(System.in);
Thread.sleep(2000);
synchronized (this) {
System.out.println("姐在,你要等会儿,我正在穿衣服,不许偷看啊");
scanner.nextLine();
System.out.println("姐要马上出来了");
notify();
Thread.sleep(2000);
}
} }

这是我写的一个小例子,是用试衣间试衣服的例子解释wait与notify的区别。action1表示一个男生的行为,action2表示一个女生的行为。而这两个行为分别被两个线程持有,取名为t1,t2,运行完就是截图的效果。 首先男生问:【有人在试衣间吗?哥要试试这性感的背心】这个肯定是要t2线程来进行回应的,但是t1t2线程已经跑起来了,怎么能让t2回应呢?就是在t1使用wait() 方法 告诉t2来回应,就是t1处于等待状态,t2来执行。当女生:【姐在,你要等会儿,我正在穿衣服,不许偷看啊】,此刻相当于t2线程在跑程序,什么时候跑完呢?为了模拟执行对话,我按个空格键,女生才会说:【姐要马上出来了】。女生换完衣服后,说一句就好了,男生只要不是聋子都能听得到,这容易啊。但是现在跑的是线程是啊,t1线程怎么知道t2跑完了,t1还在等着呢。这里t2就要用notify()方法唤醒t1线程,所以男生说:【好的,我进来了】。这里有个问题来了,你仔细想想,万一有很多个男生在外面等着进去试衣服,女生衣服换好了,就大声说一句:我换好了,你们可以进来吧(万一发生什么事,我保证不了,那画面根本不能想象啊)同理,万一是很多线程等待t2怎么办呢,他们怎么知道t2跑完了呢,这个时候不就是用notifiyAll() 来唤醒那些等待的线程吗,是吧。  好了,这么一说,对于wait notify nitifyAll还是不难的吧,如果还是不太懂,多去试衣间试试衣服然后再想想,是不是这么回事。

-------------------------------------------------------------------------------------------------------------------------------------

下一篇准备讲讲 reentrantlock 与 condition的这一对难兄难弟,学习多线程知识的确很费脑,我得喝瓶酸奶补一补,下午茶,走着!

 

当你在试衣间试衣服,请你务必想起wait()与notify()的更多相关文章

  1. 8款压箱底的Mac屏幕截图和录音录像工具软件,请你务必低调使用

    以下几款是是Mac上优秀的屏幕截图.录像和录音工具,有了这些工具,在Mac上进行截屏.录制视频或者录音都会事半功倍. 1. Snagit Mac上最好用最强大的屏幕截图工具,支持各种方式的屏幕截图以及 ...

  2. 用生活例子来解释Java synchronized块

    今天满世界的微信小程序的新闻,大家都说对于Android原生程序有构成危险了,我也不想了,以后的事谁知道呢, 我还是好好执行一下今年的计划吧.  项目刚刚上线,最近没啥事,我一直感觉自己的Java基础 ...

  3. 玩转Bash脚本:test測试语句

    总第1篇test就是測试的意思,经常使用在流程控制语句中作为条件.以下做一下介绍. 关于真值 与其它语言不同,Bash(包含其它Shell)中,是用0表示真,非0表示假的.之所以用0表示成功,而不是1 ...

  4. 【原创】请不要对Boost Format使用Byte作为参数

    曾几何时我们可以肆无忌惮的对sprintf传入BYTE等类型作为参数,只要你指定的为%D即可打印出对应的数字 但是boost format不可以,当你发生类型截断,错误,异常,请尽快查看你传入的类型是 ...

  5. Mysql的排他锁和共享锁

    今天看代码看到有select name from user where id = 1 for update,有点懵逼,完全没有见过,只能说自己见识少了,那就只能学习一下.先做一下基本知识了解(大部分都 ...

  6. MySQL数据库InnoDB存储引擎中的锁机制

    MySQL数据库InnoDB存储引擎中的锁机制    http://www.uml.org.cn/sjjm/201205302.asp   00 – 基本概念 当并发事务同时访问一个资源的时候,有可能 ...

  7. MySQL数据库InnoDB存储引擎中的锁机制(转载)

    http://www.uml.org.cn/sjjm/201205302.asp 00 – 基本概念 当并发事务同时访问一个资源的时候,有可能导致数据不一致.因此需要一种致机制来将访问顺序化. 锁就是 ...

  8. Java基础——线程

    一. 进程 是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程. 比如在Windows系统中,一个运行的exe就是一个进程. 二.线程 是指进程中的一个执行流 ...

  9. CSUST选拔赛题解

    本鶸鸡于本月10号参加了蔽校的选拔赛,成绩差的死,大部分的题都是赛后花了好长时间才补出来的,其中有些题还是靠QAQorz大佬帮忙才能解决,感谢Qls对我的帮助~接下来就附带上我的暴力题解,大佬们有更好 ...

随机推荐

  1. 浅析 JavaScript 中的 函数 currying 柯里化

    原文:浅析 JavaScript 中的 函数 currying 柯里化 何为Curry化/柯里化? curry化来源与数学家 Haskell Curry的名字 (编程语言 Haskell也是以他的名字 ...

  2. DDD分层架构之领域实体(验证篇)

    DDD分层架构之领域实体(验证篇) 在应用程序框架实战十四:DDD分层架构之领域实体(基础篇)一文中,我介绍了领域实体的基础,包括标识.相等性比较.输出实体状态等.本文将介绍领域实体的一个核心内容—— ...

  3. 工欲善其事:编辑器之神Vim(一)

    本篇文章收集了Vim最常用和实用的一些命令,掌握这些命令就可以使用Vim了 本文仅列举个人认为常用的命令,本系列文章更像是自己的学习笔记,而不是VIM使用教程. 如果你想了解vim的更多,可以看看Co ...

  4. shell awk统计重复个数

    awk是一个很强大的工具,一个常见的用法就是统计一个文件中重复的列值的个数,这也是面试时面试官经常问的一个问题. 举个例子: 有个文件file.log的内容如下: http://www.sohu.co ...

  5. 用批处理文件自动备份文件及文件夹,并自动删除n天前的文件

    原文:用批处理文件自动备份文件及文件夹,并自动删除n天前的文件 ---恢复内容开始--- 下是备份的批处理,添加到"计划任务"中,设定时间自动运行 复制代码 代码如下:@echo ...

  6. 我的Android 4 学习系列之创建用户基本界面

    目录 使用视图和布局 理解Fragment 优化布局 创建分辨率无关的用户界面 扩展.分组.创建和使用视图 使用适配器将数据绑定到视图 使用视图和布局 1. Android UI 几个基本概念 视图: ...

  7. 国内外最全面和主流的JS框架与WEB UI库

    当下对于网站前段开发人员来说,很少有人不使用一些JS框架或者WEB UI库,因此这些可以有效提高网站前段开发速度,并且能够统一开发环境,对于不同浏览器的兼容性也不需要程序员操心,有了这些优点,当然大家 ...

  8. 使用Oracle Wrap工具加密你的代码

    Oracle提供Wrap工具,可以用于加密你的Package等.不过需要注意的是,加密后的代码无法解密,你需要保管好你的源代码. 以下是个例子: 1.源代码 create or replace fun ...

  9. CSS绘制无图片的气泡对话框

    <div class="qipao_contianer">            <div class="qipao_content yj3" ...

  10. Oracle 补丁及opatch 工具介绍

    一. CPU(Critical Patch Update) 一个CPU内包含了对多个安全漏洞的修复,并且也包括相应必需的非安全漏洞的补丁.CPU是累积型的,只要安装最新发布的CPU即可,其中包括之前发 ...