线程休眠——Thread.sleep()
1、sleep介绍
sleep() 定义在Thread.java中,sleep() 的作用是让当前线程休眠,即当前线程会从“运行状态”进入到“休眠(阻塞)状态”。sleep()会指定休眠时间,线程休眠的时间会大于/等于该指定休眠时间;在线程重新被唤醒时,它会由“阻塞状态”变成“就绪状态”,从而等待cpu的调度执行
2、示例:
public class YieldThread extends Thread {public YieldThread(String name) {super(name);}@Overridepublic synchronized void run() {try {for (int i = 0; i < 10; i++) {System.out.printf("%s [%d]:%d\n", this.getName(), this.getPriority(), i);if (i % 4 == 0)Thread.sleep(3000);}} catch (InterruptedException e) {e.printStackTrace();}}
}//测试
public class MainTest {public static void main(String args[]) {YieldThread t1 = new YieldThread("t1");YieldThread t2 = new YieldThread("t2");t1.start();t2.start();}
}//结果
t1 [5]:0
t2 [5]:0
t1 [5]:1//3秒钟后
t1 [5]:2
t1 [5]:3
t1 [5]:4
t2 [5]:1
t2 [5]:2
t2 [5]:3
t2 [5]:4
t1 [5]:5//再3秒后
t1 [5]:6
t1 [5]:7
t1 [5]:8
t2 [5]:5
t2 [5]:6
t2 [5]:7
t2 [5]:8
t1 [5]:9//再3秒后
t2 [5]:9
3、sleep()和wait()比较
wait()的作用是让当前线程由“运行状态”进入“等待(阻塞)状态”,同时会释放对象的同步锁;而sleep()的作用是让当前线程由“运行状态”进入到“休眠(阻塞)状态”,但不会释放锁。示例:
public class MainTest {private static Object obj = new Object();public static void main(String args[]) {ThreadInner t1 = new ThreadInner("t1");ThreadInner t2 = new ThreadInner("t2");t1.start();t2.start();}// 静态内部类static class ThreadInner extends Thread {public ThreadInner(String name) {super(name);}public void run() {synchronized (obj) {for (int i = 0; i < 10; i++) {System.out.printf("%s: %d\n", this.getName(), i);if (i % 4 == 0)try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}}}}}
}//结果
t1: 0
t1: 1//两秒后
t1: 2
t1: 3
t1: 4
t1: 5//两秒后
t1: 6
t1: 7
t1: 8
t1: 9//两秒后
t2: 0
t2: 1//两秒后
t2: 2
t2: 3
t2: 4
t2: 5//两秒后
t2: 6
t2: 7
t2: 8
t2: 9//两秒后
可以看到先执行的线程在休眠后并没有释放锁,后执行的现在只能在先执行的线程执行完同步代码块释放锁之后再获取锁得以执行
线程休眠——Thread.sleep()相关推荐
- thread.sleep是让哪个线程休眠_Java多线程:多线程基础知识
点击上方☝SpringForAll社区 轻松关注!及时获取有趣有料的技术文章 本文来源:https://www.cnblogs.com/ITtangtang/p/7602363.html 一.线程安全 ...
- thread.sleep是让哪个线程休眠_java多线程必看:java线程的生命周期
点击蓝字 关注我们 线程是一个动态执行的过程,它也有从创建到死亡的过程.线程的几种状态 在 Thread 类中,有一个枚举内部类: 上面的信息以图片表示如下: 第一张图: 第二张图:把等待.计时等待. ...
- java thread类是抽象类_Java继承抽象类Thread,实现接口Runnable,倒计时,线程休眠,静态变量【诗书画唱】...
使用继承抽象类Thread方式创建一个线程,打印1到100之间的奇数设置其名称为线程1 package thread; public class ji { public static void mai ...
- java 线程休眠_百战程序员:java线程的休眠和回复
sleep()介绍 sleep() 定义在Thread.java中. sleep() 的作用是让当前线程休眠,即当前线程会从"运行状态"进入到"休眠(阻塞)状态" ...
- 线程休眠 sleep
线程休眠 sleep 唱歌线程 package 线程休眠;public class Sing extends Thread {@Overridepublic void run() {int m = 1 ...
- Java多线程:线程休眠
线程休眠注意点 sleep(时间)指定当前线程阻塞的毫秒数 sleep存在异常InterruptedException sleep时间达到后线程进入就绪状态 sleep可以模拟网络延时,倒计时等 每个 ...
- java线程(Thread)的创建与常用方法
目录 Process与Thread 线程的创建 继承Thread 2. 实现Runnable 3. 实现Callable 通过线程下载图片的例子 实现Runnable接口 抢票的例子: 龟兔赛跑: 实 ...
- java sleep唤醒_详解Java中的线程让步yield()与线程休眠sleep()方法
Java中的线程让步会让线程让出优先级,而休眠则会让线程进入阻塞状态等待被唤醒,这里我们对比线程等待的wait()方法,来详解Java中的线程让步yield()与线程休眠sleep()方法 线程让步: ...
- 线程休眠 java_Java线程休眠和线程让步
线程休眠:我们希望人为地控制线程,使得正在执行的线程暂停,将CPU让给别的线程,我们可以使用静态方法sleep(long millis),该方法可以让当前正在执行的线程暂停一段时间,进入休眠等待状态. ...
最新文章
- MavenSelenium测试自动化教程
- JVM学习笔记之-StringTable String的基本特性,内存分配,基本操作,拼接操作,intern()的使用,垃圾回收 ,G1中的String去重操作
- 论文摘要这么重要,你却不知道怎么写?
- 简单mysql优化_MySQL简单优化
- 效率提升总结-Unity 项目规范文档 【建议收藏】
- java jdk1.5_jdk1.5 64位官方下载
- 论文 | 科研软件 —— SPSS Statistics V26.0安装及注册教程
- 获取URI和URL中的参数
- 乐优商场项目day08——图片(文件)上传
- c++矩阵转置_线性代数(Gelbert)对称矩阵
- Android Startup实现分析
- _VMware_虚拟机到_KVM
- 各种插件、扩展、工具网站
- linux 播放m4a 文件,M4A是什么文件?如何提取M4A音频?
- 后期维特根斯坦的语境观“:语言游戏”与“生活形式”
- 万豪 数据泄露 sql注入_如何防止数据库泄漏和注入
- 认识TIA博途Portal软件平台
- memont高级使用说明
- 2004-2005学年第二学期教育教学工作小结
- 用dreamweaver打开asp网页出现乱码怎么办