方法wait()

方法wait()的作用是使当前执行代码的线程进行等待, wait()被执行后,锁被自动释放。wait()方法是Object类的方法,该方法用来将当前线程置入"预执行队列"中,并且在wait()所在的代码处停止执行,直到接到通知或被中断为止。

方法notify()

在执行完notify()方法后,当前线程不会马上释放该对象锁,呈wait状态的线程也并不能马上获取该对象锁,要等到执行notify()方法的线程将程序执行完,也就是退出synchronized代码块后,当前线程才会释放锁,而呈wait状态所在的线程才可以获取该对象锁。

notify()方法一次只随机通知一个线程进行唤醒。

notifyAll()方法唤醒所有线程。

wait(long)方法

带一个参数的wait(long)方法的功能是等待某一时间是否有线程对锁进行唤醒,如果超过这个时间则自动唤醒。

public class Run {static private Object lock = new Object();static private Runnable runable1 = new Runnable(){@Overridepublic void run() {synchronized(lock){try {System.out.println("wait begin timer" + System.currentTimeMillis());lock.wait(5000);System.out.println("wait   end timer" + System.currentTimeMillis());} catch (InterruptedException e) {e.printStackTrace();}}}};public static void main(String[] args){Thread t = new Thread(runable1);t.start();}
}

当interrupt方法遇到wait方法

当线程呈wait状态时, 调用线程对象的interrupt()方法会出现InterruptedException异常.

public class Service {public void testMethod(Object lock){try{synchronized(lock){System.out.println("begin wait...");lock.wait();//Thread.sleep(10000);System.out.println("  end wait...");}}catch(InterruptedException e){e.printStackTrace();System.out.println("出现异常了,因为呈wait状态的线程被interrupt了 !");}}
}public class ThreadA extends Thread{private Object lock;public ThreadA(Object lock){this.lock = lock;}@Overridepublic void run(){Service service = new Service();service.testMethod(lock);}
}public class Test {public static void main(String[] args){try{Object lock = new Object();ThreadA a = new ThreadA(lock);a.start();Thread.sleep(5000);a.interrupt();}catch(InterruptedException e){e.printStackTrace();}}
}

通过管道进行线程间通信: 字节流,字符流

在jdk中, 提供了4个类来使线程间可以进行通信:

1). PipedInputStream 和 PipedOutputStream  处理字节流

2). PipedReader和PipedWriter  处理字符流

线程:等待/通知机制相关推荐

  1. Java并发编程(04):线程间通信,等待/通知机制

    本文源码:GitHub·点这里 || GitEE·点这里 一.概念简介 1.线程通信 在操作系统中,线程是个独立的个体,但是在线程执行过程中,如果处理同一个业务逻辑,可能会产生资源争抢,导致并发问题, ...

  2. java 线程等待队列_Java多线程学习(五)——等待通知机制

    等待通知机制的实现 方法wait()的作用是使当前线程进行等待,wait()方法是Object类的方法,该方法用来将当前线程放到"预执行队列",并在wait()所在的代码处停止执行 ...

  3. 超强图文|并发编程【等待/通知机制】就是这个feel~

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 你有一个思想,我有一个思想,我们交换后,一个人就有两个思想 If ...

  4. Java中的等待/通知机制(wait/notify)

    为什么80%的码农都做不了架构师?>>>    当一个线程修改了一个对象的值,另外一个线程需要感知到这个变化,并且做出相应的操作时,可以使用Java中的等待/通知机制去实现这个功能. ...

  5. java 等待_Java并发之等待/通知机制

    1 前言 本篇文章默认大家对synchronized跟ReentrantLock有一定了解. 1.1 先来段代码放松一下 下面一段简单的代码,主要是通过3个线程对count进行累计来进行模拟多线程的场 ...

  6. Java并发编程,Condition的await和signal等待通知机制

    Condition简介 Object类是Java中所有类的父类, 在线程间实现通信的往往会应用到Object的几个方法: wait(),wait(long timeout),wait(long tim ...

  7. 浅析Condition与等待通知机制

    Condition是在java 1.5中才出现的,它用来替代传统的Object的wait().notify()实现线程间的协作,相比使用Object的wait().notify(),使用Conditi ...

  8. 队列和通知区别_Java多线程学习(五)——等待通知机制

    等待通知机制的实现 方法wait()的作用是使当前线程进行等待,wait()方法是Object类的方法,该方法用来将当前线程放到"预执行队列",并在wait()所在的代码处停止执行 ...

  9. 用“等待-通知”机制优化循环等待

    用"等待-通知"机制优化循环等待 前言 完美的就医流程 用 synchronized 实现等待 - 通知机制 小试牛刀:一个更好地资源分配器 尽量使用 notifyAll() 总结 ...

最新文章

  1. Windows Server 2008 R2 DNS 服务器迁移方法
  2. 全球及中国商用电饭煲行业现状调研及投资决策建议报告2021-2027年版
  3. java 安卓基础面试题_android-------Java 常问的基础面试题
  4. linux 中文文件名不能下载不了,linux 64位系统 mod_encoding解决中文文件名不能下载问题...
  5. latex中怎么设置每一行文字都对齐_排版系列教程 | LaTeX,为学术论文排版而生【浮动体篇】...
  6. Spring AOP之XML配置
  7. php html转ubb,php ubb转换成html,html转换成ubb代码
  8. 办公自动化系统项目报告
  9. 基于C#的ico图标制作与应用
  10. piranha启动报错
  11. 《企业大数据系统构建实战:技术、架构、实施与应用》——2.2 大数据职位构建体系...
  12. Mac重装系统出错的心路历程
  13. linux R语言 安装
  14. Java菜鸟到大牛学习路线培训视频
  15. 计算机低级格式化,电脑如何低格硬盘?电脑低格硬盘的方法
  16. Android 后台保活,这里有你需要的所有姿势。2019,flutterlistview滚动卡顿
  17. 佛教信仰是什么(1)
  18. PAT甲级1002 All Roads Lead to Rome
  19. Causal Language Modeling和Conditional Generation有什么区别
  20. 前端笔记:animate+easing用法(hexo next主题自定义动画)

热门文章

  1. linux -- ./configure --prefix 命令
  2. Matlab图像处理教程
  3. windows 程序员电脑设置
  4. hdu4635(最多加多少边,使得有向图不是强连通图)
  5. fix issues
  6. DB设计原则(一)字段名定义避免二义性。
  7. 叹西安2014中秋节雨天
  8. mybatis使用foreach实现sql的in查询
  9. Kosaraju 算法查找强连通分支
  10. 第13章 Kotlin 集成 SpringBoot 服务端开发(1)