• 等待线程结束:jion()
  • 谦让: yeild()
  • 睡眠: sleep()

jion和sleep和yeild之间有什么区别呢?

首先介绍一下jion():

如果想让主线程等待子线程执行完毕之后再继续运行,比如线程处理一个数据,主线程想要获得这个线程的处理结果,因为线程之间是并行的,这个时候就需要用到jion()方法。方向jion()的作用就是等待线程对象销毁。

先来看一段示例代码:

public class MyThread extends Thread {
@Override
public void run(){
try{
int value = (int) (Math.random()*1000);
System.out.println("i will sleep for "+value+" ms");
Thread.sleep(value);
}catch (InterruptedException e){
e.printStackTrace();
}
}
} public class Test {
public static void main(String[] args) {
try{
MyThread thread = new MyThread();
thread.start();
thread.join();
System.out.println("我想在上面的线程执行结束只会再执行,我成功了!");
}catch (InterruptedException e){
e.printStackTrace();
}
System.out.println("================分割线=====================");
MyThread myThread = new MyThread();
myThread.start();
System.out.println("我也想在上面的线程执行完毕之后执行!");
System.out.println("但是我不知道应该sleep多久啊!");
System.out.println("i failed...");
}
}

放上执行结果:

i will sleep for 436 ms
我想在上面的线程执行结束只会再执行,我成功了!
================分割线=====================
我也想在上面的线程执行完毕之后执行!
但是我不知道应该sleep多久啊!
i failed...
i will sleep for 936 ms

这里介绍一下join()的原理,方法jion()具有使线程排队运行的作用,有些类似同步的运行效果。jion和synchronized的区别是:join在内部使用wait()方法进行等待,而synchronized关键字使用对象监视器原理作为同步。

划重点,因为join()使用了wait()所以,join是释放锁的!是释放锁的!

这是join和sleep的主要区别!

然后介绍一下yeild()

yeild()就是简单让线程让出cpu资源,所以yeid()只是一种谦让的方法,因为是谦让,所以他可以刚谦让过,立马就又恢复运行,但是!!!yeild不会释放对象锁!!!!

package page_7;

public class ThreadYieldAndSleepTest implements Runnable {
private int count = 0;// 系统访问次数 @Override
public synchronized void run() {// 通过synchronized实现同步
count++;
try {
if (count == 1) {
/// <注>. sleep 和 yield 都不会释放 <锁资源>。
Thread.yield();
}
} catch (Exception e) {
// TODO: handle exception
} System.out.println(Thread.currentThread().getName() + "线程: " + "第" + count + "位访客来啦!");
} public static void main(String[] args) {
ThreadYieldAndSleepTest rd = new ThreadYieldAndSleepTest();
for (int i = 1; i <= 50; i++) {
Thread thread = new Thread(rd, String.valueOf(i));
thread.start();
}
}
}

运行结果为:

1线程: 第1位访客来啦!
50线程: 第2位访客来啦!
49线程: 第3位访客来啦!
48线程: 第4位访客来啦!
47线程: 第5位访客来啦!
......

没有被抢占,所以yeild()不会释放锁!

最后介绍一下sleep

sleep的介绍很多,sleep是不会释放锁的

总结

sleep和yeild 一样不会释放锁

join 会释放锁

sleep和join如果不考虑对象锁的情况下,功能基本一致

方法Join()的更多相关文章

  1. 方法join()使用详解

    在线程的常见方法一节中,已经接触过join()方法的使用. 在很多情况下,主线程创建并启动子线程,如果子线程中要进行大量的耗时运算,主线程将早于子线程结束.这时,如果主线程想等子线程执行完成才结束,比 ...

  2. 进程?线程?多线程?同步?异步?守护线程?非守护线程(用户线程)?线程的几种状态?多线程中的方法join()?

    1.进程?线程?多线程? 进程就是正在运行的程序,他是线程的集合. 线程是正在独立运行的一条执行路径. 多线程是为了提高程序的执行效率.2.同步?异步? 同步: 单线程 异步: 多线程 3.守护线程? ...

  3. python中列表元素连接方法join用法实例

    python中列表元素连接方法join用法实例 这篇文章主要介绍了python中列表元素连接方法join用法,实例分析了Python中join方法的使用技巧,非常具有实用价值,分享给大家供大家参考. ...

  4. Python--day37--多进程中的方法join()

    1,多进程中的方法join()的作用: 感知一个子进程的结束,将异步的程序改为同步 #join() import time from multiprocessing import Process de ...

  5. java 线程方法join的简单总结

    虽然关于讨论线程join方法的博客已经很多了,不过个人感觉挺多都讨论得不够全面,所以我觉得有必要对其进行一个全面的总结. 一.作用 Thread类中的join方法的主要作用就是同步,它可以使得线程之间 ...

  6. 数组中的元素 增加push用法 unshift() 方法 和减少pop() 方法 shift() 和其他位置增删 splice() 方法 join() 方法 reverse() 方法 sort() 方法

    push用法 push 英 [pʊʃ] 美 [pʊʃ] vt. 推,推动; vt. 按; 推动,增加; 对…施加压力,逼迫; 说服; n. 推,决心; 大规模攻势; 矢志的追求 定义和用法 push( ...

  7. Java并发编程:Java Thread方法join的简单总结

    虽然关于讨论线程join方法的博客已经很多了,不过个人感觉挺多都讨论得不够全面,所以我觉得有必要对其进行一个全面的总结. 一.作用 Thread类中的join方法的主要作用就是同步,它可以使得线程之间 ...

  8. 记录一个python公式罗列的方法 join()方法和map()方法的妙用

    题干: 怎样将一个列表中的元素读出,并列出计算式子 比如:[,,,] 输出:+++ = 列表中的元素个数不定 小白和大神的方法: #小白的 numlist=[,,,] sum1='' cal='+' ...

  9. java线程方法join的总结

    虽然关于讨论线程join方法的博客已经很多了,不过个人感觉挺多都讨论得不够全面,所以我觉得有必要对其进行一个全面的总结. 一.作用 Thread类中的join方法的主要作用就是同步,它可以使得线程之间 ...

  10. pandas按索引插入对应值的处理方法 - join

    在工作中遇到一个问题即,实时的车辆数据中,需要将车辆的vid(一个Series)对应上其通用名称,以及车辆用途等信息进行统计. 正常的小规模操作是利用一个循环,查找vid 在另一张vid对应车辆名称用 ...

随机推荐

  1. python——列表操作函数和方法

    1.添加新元素 1.1 append()函数 描述:append() 方法用于在列表末尾添加新的对象. 语法:list.append(obj) 参数:obj -- 添加到列表末尾的对象. 返回值:该方 ...

  2. springcloud费话之Eureka服务访问(restTemplate)

    目录: springcloud费话之Eureka基础 springcloud费话之Eureka集群 springcloud费话之Eureka服务访问(restTemplate) springcloud ...

  3. 解决MySQL在导入大文件时候,出现MySQL Server has gone away的问题

    编辑/etc/my.cnf文件,在[myslqd]节点,添加 max_allowed_packet = 64M 随后重启MySQL即可.

  4. 240-4C6678_K7_DDR3_VPX高速信号处理板

    4C6678_K7_DDR3_VPX高速信号处理板 4C6678_K7_DDR3_VPX板为基于TI   多核DSP TMS320C6678的通用处理板卡.板卡满足OpenVPX平台标准,可为雷达.电 ...

  5. mysql官网下载安装

    1.官网下载zip压缩文件 2.解压到指定文件夹 3.配置环境变量 4.新建my.ini 5.管理员权限打开cmd命令行,mysqld install mysql,mysql --initialize ...

  6. React 和 Vue 到底谁更牛?听听尤雨溪怎么说

    React 和 Vue 到底谁更牛?听听尤雨溪怎么说 知乎上近日有人发起了一个 “react 是不是比 vue 牛皮,为什么?” 的问题,再度引发一场关于前端框架谁更牛的口水战,评论里可以说是撕得不可 ...

  7. mysql小知识

    char(10): 换行符 char(13): 回车符 UPDATE tablename SET field = REPLACE(REPLACE(field, CHAR(10), ”), CHAR(1 ...

  8. oracle中分页函数写法

    1.常见的分页查询语句: 查询21到40条之间的数据:SELECT *FROM (select UI.*,ROWNUM RN FROM (select * from user_info) AWHERE ...

  9. Vue----渐进式框架的理解

    对“渐进式”这三个字的理解:Vue渐进式-先使用Vue的核心库,再根据你的需要的功能再去逐渐增加加相应的插件. 以下理解出处:https://www.zhihu.com/question/519072 ...

  10. 空间日志编辑器:word文档图文快速粘贴到web

    百度ueditor可以实现word文档图文快速粘贴到web 1.4.2之后官方并没有做功能的改动,1.4.2在word复制这块没有bug,其他版本会出现手动无法转存的情况 本文使用的后台是Java.前 ...