这里先说明一下锁对象,如果一个类比如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. JDBC的简单使用

    JDBC的英文全称是:  java Data Base Connectivity JDBC的主要作用:  (是java数据库连接技术的简称)JDBC是由一系列连接(Conneation).SQL语句( ...

  2. Unity中各类物理投射性能横向比较

    最近在优化摄像机部分代码,抽了个时间对物理投射这块进行了系统性的测试,发现了不少东西 测试工程下载地址: http://files.cnblogs.com/files/hont/RaycastTest ...

  3. jQuery 弹出层脚本

    直接贴代码: $.extend({ closeBox: function (o, x, fn) { $('#' + o).fadeOut(500, function () { if (fn & ...

  4. 【前端】Ember.js学习笔记

    Model 在默认情况下,model钩子返回的值,会设置为关联的控制器的model属性.例如,如果App.PostsRoute通过model钩子返回了一个对象,这个对象会设置为App.PostsCon ...

  5. 【状压DP】bzoj1087 互不侵犯king

    一.题目 Description 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上.下.左.右,以及左上.左下.右上.右下八个方向上附近的各一个格子,共8个格子. I ...

  6. Element is not currently interactable and may not be manipulated

    Element is not currently interactable and may not be manipulated:元素当前不可交互,并且可能无法操作. 解决方法: 调用该方法,智能等待 ...

  7. 一个简单的loading,纯属自娱自乐

    /// <reference path="/scripts/js/jquery.min.js" /> var zsw = { loading: function (im ...

  8. Cheatsheet: 2016 11.01 ~ 11.30

    Web Getting Started With Vapor: A Swift Web Framework Front-end vs Back-end vs Network Performance S ...

  9. tableLayoutPanel的使用

    https://msdn.microsoft.com/en-us/library/ms171687(v=vs.110).aspx Controls in a TableLayoutPanel cont ...

  10. 解决android:background背景图片被拉伸问题

    ImageView中XML属性src和background的区别: background会根据ImageView组件给定的长宽进行拉伸,而src就存放的是原图的大小,不会进行拉伸.src是图片内容(前 ...