Java线程sleep,yield,join,wait方法详解
1、sleep()
当一个线程调用sleep方法后,他就会放弃cpu,转到阻塞队列,sleep(long millis)方法是Thread类中的静态方法,millis参数设定线程睡眠的时间,毫秒为单位。当调用sleep方法的时候,可以让其他线程有机会执行,但是注意sleep方法不会释放对象锁,我们所说的锁,一般情况下是同步锁,也就是被synchronized修饰的方法或者同步块,被synchronized关键字修饰的代表同步,如果大家想要访问/执行这部分的数据/代码就要排队等候。想要调用sleep方法让别的线程访问同步块中的内容是不可能的,原因就sleep方法不会释放锁。
2、yield()
yield()方法中没有参数。当线程执行Thread中的yield()静态方法是时候,如果此时具有同等优先级的其他线程就处于就绪状态了。如果没有同等优先级的线程,那么yield()方法什么也不做。这个方法只给同等优先级的线程机会,对于其他的线程不管,还是一个很公平的方法。
sleep()和yield()方法都是Thread中的静态方法,都会让当前处于运行状态的线程放弃cpu,让其他线程有运行的机会,但是也是有区别的:
- sleep()方法和yield()方法都会给其他线程运行的机会但是sleep()方法不会考虑线程的优先级,因此会给优先级低的线程机会,让优先级低的线程有机会运行。yield()方法只会给相同优先级的线程或者更高优先级的线程机会,对于低优先级的不管。
- sleep()方法会声明抛出异常,需要捕获处理,yield()不会声明抛出异常
- 当线程执行yield()方法的时候,线程转到就绪状态,当线程执行sleep()方法的时候,线程转到阻塞状态
3、join()
等待其他线程结束。当前运行的线程可以调用另一个线程的join()方法,当前线程就会转到阻塞队列,等到另一个线程运行结束,本线程才能恢复运行
4、wait()和notify()、notifyAll()
这三个方法是Object类中的方法,都会对锁进行操作,所以都要在同步代码块中使用,这样才可以让其他线程共享其中的数据。wait()方法使当前线程暂停执行并释放对象锁,让其他线程可以进入synchronized数据块,当前线程被放入对象等待池中。当调用notify()方法后,将从对象的等待池中有机会移走一个任意的线程并放到锁标志等待池中,只有锁标志等待池中线程能够获取锁标志;如果锁标志等待池中没有线程,则notify()不起作用。notifyAll()则从对象等待池中移走所有等待那个对象的线程并放到锁标志等待池中。
Java线程sleep,yield,join,wait方法详解的更多相关文章
- java线程中yield(),sleep(),wait()区别详解
1.sleep() 使当前线程(即调用该方法的线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁.也就是说如果有synchronized同步快,其他线程仍然不能访问共享数据.注意该方 ...
- java多线程并发(二)--线程的生命周期及方法详解
上篇随笔介绍了线程的相关基础知识以及新启线程的几种方法,本片将继续介绍线程的生命周期及方法详解. 一.线程的生命周期 在Thread代码中,线程的状态被分为6种 public enum State { ...
- Java中的equals和hashCode方法详解
Java中的equals和hashCode方法详解 转自 https://www.cnblogs.com/crazylqy/category/655181.html 参考:http://blog.c ...
- 转:Java中的equals和hashCode方法详解
转自:Java中的equals和hashCode方法详解 Java中的equals方法和hashCode方法是Object中的,所以每个对象都是有这两个方法的,有时候我们需要实现特定需求,可能要重写这 ...
- Java提高篇——equals()与hashCode()方法详解
java.lang.Object类中有两个非常重要的方法: 1 2 public boolean equals(Object obj) public int hashCode() Object类是类继 ...
- java线程的五大状态,阻塞状态详解
一.状态简介 一个线程的生命周期里有五大状态,分别是: 新生 就绪 运行 死亡 运行后可能遇到的阻塞状态 二.相关方法 2.1 新生状态 Thread t = new Thread(); 正如我们前面 ...
- Java线程同步的四种方式详解(建议收藏)
Java线程同步属于Java多线程与并发编程的核心点,需要重点掌握,下面我就来详解Java线程同步的4种主要的实现方式@mikechen 目录 什么是线程同步 线程同步的几种方式 1.使用sync ...
- Java解析XML的四种方法详解 - 转载
XML现在已经成为一种通用的数据交换格式,平台的无关性使得很多场合都需要用到XML.本文将详细介绍用Java解析XML的四种方法 在做一般的XML数据交换过程中,我更乐意传递XML字符串,而不是格式化 ...
- Java多线程中join、yield、sleep方法详解
在Java多线程编程中,Thread类是其中一个核心和关键的角色.因此,对该类中一些基础常用方法的理解和熟练使用是开发多线程代码的基础.本篇主要总结一下Thread中常用的一些静态方法的含义及代码中的 ...
- java线程并发控制:ReentrantLock Condition使用详解
本文摘自:http://outofmemory.cn/java/java.util.concurrent/lock-reentrantlock-condition java的java.util.con ...
随机推荐
- Docker系列一:Docker基本概念及指令介绍
1. Docker是什么? Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用 ...
- R语言︱情感分析—词典型代码实践(最基础)(一)
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 笔者寄语:词典型情感分析对词典要求极高,词典中 ...
- VxWorks下USB驱动总结1
1.USB设备 物理特征:4条电缆,电源线.地线.数据线.脉冲线; 速 度:低速1.5Mbps,全速12Mbps,高速480Mbps; 规范版本:1998年USB1.1,2000年USB2.0; 连 ...
- Excel 2010高级应用-折线图(二)
在Excel中画折线图,具体操作过程如下: 1.新建一个excel文件,双击打开 2.单击"插入",找到折线图,单击下拉框 3.在折线框下方,新建数据源 4.鼠标右键,选择&quo ...
- Caused by: org.xml.sax.SAXParseException; lineNumber: 28; columnNumber: 81;
1.错误描述 严重: Exception sending context initialized event to listener instance of class org.springframe ...
- Flex中单选按钮控制表格中的列的增加或减少
1.问题背景 单选按钮有"苹果"和"香蕉"两个,表格中的列有星期.苹果.香蕉和苹果比率,选择了"苹果"单选按钮,表格显示星期.苹果和苹果比率 ...
- pat1051-1060
1051 自己写的非常麻烦 http://blog.csdn.net/biaobiaoqi/article/details/9338397 的算法比较好,我的就贴下吧,主要对入栈出栈不够理解 #inc ...
- hdu5820 Lights
主席树 但是能够想到题解的做法很难 #include <stdio.h> #include <string.h> #include <vector> #includ ...
- C#的动态链接库和XML配置
今天对昨天的实例进行了改进和提高,将堆排序和冒泡排序封装在一个动态链接库中,提供函数调用和事件委托.此外加入XML进行配置,在XML中存入相关配置信息,提供一个单独的XmlClass对其进行操作,加深 ...
- python中的递归函数
在python中,函数可以调用其他函数,如果函数调用的是它本身,则称这样的函数为递归函数. 1.利用递归函数计算阶乘 递归函数最简单的例子就是计算阶乘. 阶乘:通项公式为n! = n * (n-1)! ...