这里先说明一下锁对象,如果一个类比如Person里的方法都有synchronized来修饰,那么每一个方法的锁对象就是Person的一个实例person.

锁对象也可以针对某个特定的实例, 比如synchronized(bird) {//code;}, 此时的锁对象就是bird这个实例。

1. sleep

使得当前线程睡一会,醒来后继续被服务。 这样就会让其他优先级的线程(较低,同级或是高优先级)得到机会执行。

*Sleep 不会释放对象锁,也就是虽然当前线程暂停运行,但是如果它有对应的锁对象(比如当前方法是synchronized修饰的), 其他线程都无法再得到this锁对象,

所以其他synchronized方法或是synchronized(this)修饰的代码块,都不会执行。

2. yield

使得当前线程还是就绪状态,它会首先查看是否有其他同优先级的线程,如果有,则运行其他线程,如果没有,就继续原来的线程。

*yield 也不会释放对象锁

3. join

线程A调用了线程B的join方法,那么线程A会等到线程B执行完后,才继续运行后边的代码。

sleep(),yield(),join()在Thread类中定义

3. wait, notify 和 notifyAll

wait,notify 和 notifyAll都是用来执行同步的代码,所以它们都是在synchronized代码块中。

他们都是Object的方法,所以都是针对于一个对象,比如Student类对象student。

wait表明,当前线程放弃锁对象(student.wait(), 此时的锁对象是student实例), 并将自己放入对象等待池中。此时,其他的线程就可以得到锁对象,并且运行。

wait还可以传入参数,wait(long timeout);

notify表明,从对象等待池中,移出一个转入到锁状态等待池,如果此线程得到了锁,就执行。

notifyAll表明,从对象等待池中,移除所有线程到锁状态等待池

当线程A对线程B调用interrupt()方法时,如果线程B正在运行业务逻辑,它不会退出,直到线程B运行到wait(),sleep()和join()方法时,才会抛出InterruptedException.

JAVA 多线程随笔 (二) sleep, yield, join, wait 和notify的更多相关文章

  1. Java 多线程基础(九)join() 方法

    Java 多线程基础(九)join 方法 一.join() 方法介绍 join() 定义 Thread 类中的,作用是:把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程.如:线 ...

  2. Java多线程(二)关于多线程的CPU密集型和IO密集型这件事

    点我跳过黑哥的卑鄙广告行为,进入正文. Java多线程系列更新中~ 正式篇: Java多线程(一) 什么是线程 Java多线程(二)关于多线程的CPU密集型和IO密集型这件事 Java多线程(三)如何 ...

  3. 简述Java多线程(二)

    Java多线程(二) 线程优先级 Java提供一个线程调度器来监控程序中启动后进入就绪状态的所有线程,线程调度器按照优先级决定应该调度哪个线程来执行. 优先级高的不一定先执行,大多数情况是这样的. 优 ...

  4. Java多线程(二) —— 线程安全、线程同步、线程间通信(含面试题集)

    一.线程安全 多个线程在执行同一段代码的时候,每次的执行结果和单线程执行的结果都是一样的,不存在执行结果的二义性,就可以称作是线程安全的. 讲到线程安全问题,其实是指多线程环境下对共享资源的访问可能会 ...

  5. Java总结篇系列:Java多线程(二)

    本文承接上一篇文章<Java总结篇系列:Java多线程(一)>. 四.Java多线程的阻塞状态与线程控制 上文已经提到Java阻塞的几种具体类型.下面分别看下引起Java线程阻塞的主要方法 ...

  6. java多线程系列(二)

    对象变量的并发访问 前言:本系列将从零开始讲解java多线程相关的技术,内容参考于<java多线程核心技术>与<java并发编程实战>等相关资料,希望站在巨人的肩膀上,再通过我 ...

  7. java多线程系列(二)---对象变量并发访问

    对象变量的并发访问 前言:本系列将从零开始讲解java多线程相关的技术,内容参考于<java多线程核心技术>与<java并发编程实战>等相关资料,希望站在巨人的肩膀上,再通过我 ...

  8. Java多线程系列二——Thread类的方法

    Thread实现Runnable接口并实现了大量实用的方法 public static native void yield(); 此方法释放CPU,但并不释放已获得的锁,其它就绪的线程将可能得到执行机 ...

  9. 【Java多线程系列二】Thread类的方法

    Thread实现Runnable接口并实现了大量实用的方法. /* * 此方法释放CPU,但并不释放已获得的锁,其它就绪的线程将可能得到执行机会,它自己也有可能再次得到执行机会 */ public s ...

随机推荐

  1. OpenGL FAQ

    转自:http://www.cnblogs.com/indif/archive/2011/04/22/2024659.html 1.什么是OpenGL?OpenGL即开放图形库(Open Graphi ...

  2. 2D空间中判断一点是否在三角形内

    要注意如果是XY坐标轴的2D空间,要取差乘分量z而不是y. 实现原理是,将三角形ABC三个边(AB,BC,CA)分别与比较点判断差乘,如果这3个差乘结果表示的方向一致,说明就在三角形内. 效果: 代码 ...

  3. jQuery 操作 CSS

    jQuery 拥有若干进行 CSS 操作的方法.我们将学习下面这些: addClass() - 向被选元素添加一个或多个类 removeClass() - 从被选元素删除一个或多个类 toggleCl ...

  4. 【PC端】jQuery+PHP实现浏览更多内容(jquery.more.js插件)

    参数说明: 'amount' : '10', //每次显示记录数 'address' : 'comments.php', //请求后台的地址 'format' : 'json', //数据传输格式 ' ...

  5. [转]Part2: Understanding !PTE, Part2: Flags and Large Pages

    http://blogs.msdn.com/b/ntdebugging/archive/2010/04/14/understanding-pte-part2-flags-and-large-pages ...

  6. webDriver 执行杀死浏览器进程方法

    /**     * 执行dos命令     * @param command     */    public static void command(String command) {       ...

  7. GOLANG 声明

    GO语言声明关键字 var 声明变量 const 声明常量 type 声明新类型 func 声明函数(方法) package 声明包 interface 声明接口

  8. [OC] 理解Bitcode:一种中间代码

    Tip:参考资料 理解Bitcode:一种中间代码 (内容从该博客摘录的.本随笔摘录些简要内容.) App Distribution Guide – App Thinning (iOS, watchO ...

  9. WinForm开发框架【细化权限至操作按钮】

    有不少园友经常问我程序有没有更新,真的很抱歉,最近因为工作原因一直很忙,导致程序有很长时间都没有更新了,首先在这里感谢关心俺的朋友们. 这几天好好看了一下原来的程序,还有很多地方需要改进,比如操作数据 ...

  10. Hibernate的映射文件配置

    对象关系的映射是用一个XML文档来说明的.映射文档可以使用工具来生成,如XDoclet,Middlegen和AndroMDA等.下面从一个映射的例子开始讲解映射元素,映射文件的代码如下: <?x ...