名称解释

Sleep:意思就是睡眠,当前线程暂停一段时间让给别的线程去运行;Sleep是怎么复活的?由你的睡眠时间而定,等睡眠到规定的时间自动复活。

Yield:就是当前线程正在执行的时候停止下来进入等待队列(就绪状态,CPU依然有可能把这个线程拿出来运行),回到等待队列里在系统的调度算法里头呢还是依然有可能把你刚回去的这个线程拿回来继续执行,当然,更大的可能性是把原来等待的那些拿出一个来执行,所以yield的意思是我让出一下CPU,后面你们能不能抢到那我不管。

join:意思就是在自己当前线程加入你调用Join的线程(),本线程等待。等调用的线程运行完了,自己再去执行。t1和t2两个线程,在t1的某个点上调用了t2.join,它会跑到t2去运行,t1等待t2运行完毕继续t1运行(自己join自己没有意义)。

代码

Sleep

 public void sleepDemo() {
new Thread(()->{
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
}

Yield

public void yieldDemo(){
new Thread(()->{
for (int i = 0; i < 20; i++) {
if (i/2==0){
Thread.yield();
}
System.out.println("A--->"+i);
}
}).start(); new Thread(()->{
for (int i = 0; i < 20; i++) {
System.out.println("B--->"+i);
}
}).start();
}

Join

public void joinDemo(){
Thread t1=new Thread(()->{
for (int i = 0; i < 20; i++) {
System.out.println("t1--->"+i);
}
});
t1.start(); new Thread(()->{
for (int i = 0; i < 20; i++) {
if (i==3){
try {
t1.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("t2--->"+i);
}
}).start();
}

Gitee地址

https://gitee.com/zhuayng/foundation-study/blob/develop/JavaBasis/JUC/src/main/java/com/yxkj/juc/c_000/Sleep_Yield_Join.java

Sleep_Yield_Join的更多相关文章

随机推荐

  1. .Net Core 3.1 WebApi使用Swagger生成Api文档

    用swagger生成Api文档 1.安装Swashbuckle.AspNetCore 右键单击"解决方案资源管理器" > "管理 NuGet 包"中的项目 ...

  2. Inside Java Newscast #1 深度解读

    本文是 Inside Java Newscast #1 的个人体验与解读.视频地址:点击这里 ⎯⎯⎯⎯⎯⎯ Chapters ⎯⎯⎯⎯⎯⎯ 0:00 - Intro 0:57 - Java 16 – ...

  3. Node.js 模块之【passport】

    什么是passport passport是Nodejs的一个中间键,用于用户名和密码的验证登陆.在项目中我用它来验证后台用户名和密码,但passport更多用在第三方登录,功能强大. 安装与配置 本项 ...

  4. LINUX学习-Mysql集群-主主备份

    接着主从备份继续. 1.编辑主从服务器 vim /etc/my.cnf 在server-id下添加一句 忽略一些信息 binlog-ignore-db=mysql 2.从服务器也授权给主服务器 gra ...

  5. vue 表格树 固定表头

    参考网上黄龙的表格树进行完善,并添加固定表头等的功能,目前是在iview的项目中实现,如果想在element中实现的话修改对应的元素标签及相关写法即可. <!-- @events @on-row ...

  6. spring是线程安全的吗

    spring默认bean是单例无状态的,我们交给spring管理的service,controller都是一个单例的bean,也就是说多个线程共享一个实例. 如果你在这种类里写成员变量,那这个变量的访 ...

  7. day1 三位数各个位上的数字和

    int main(){ int x = 0; scanf("%d", &x); if (x > 999 || x < 0) { printf("输入错 ...

  8. 阐述JDBC操作数据库的步骤

    1. 加载驱动. Class.forName("oracle.jdbc.driver.OracleDriver"); (注意:加载驱动在JDBC 4.0中是可以省略的,自动从类路径 ...

  9. 关于BIO NIO和AIO的理解

    转载自 :http://blog.csdn.net/anxpp/article/details/51512200 1.BIO编程 1.1.传统的BIO编程 网络编程的基本模型是C/S模型,即两个进程间 ...

  10. 巅峰对决之Swarm、Kubernetes、Mesos

    另外一篇 https://www.sohu.com/a/157185937_287582 Docker Docker是一个主流容器管理工具,它是第一个基于Linux容器(LXC)的[2],但是现在被r ...