• 等待线程结束: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 eval( ) 使用详解

      1.解析表达式 (表达式是str类型)----最常用     a = 12     b = "联播"     result1 = eval(a+3)        # resu ...

  2. [Linux Test Project] [PATCH] Fix an bad variable name erro in runltp script

    [PATCH] Fix an bad variable name erro in runltp script (/opt/ltp/runltp) Hi All,   I got an error fo ...

  3. python学习第十二天列表的循环,排序,统计操作方法

    python列表最重要的列表的循环,任何有序列表离不开循环,列表的循环 for  in  range等关键词,还有列表排序,正序,倒序,还有列表每个元素的最大,最小,统计元素的个数等. 1,列表的循环 ...

  4. C#面试 笔试题 二

    1.using关键字有什么用?什么是IDisposable? using可以声明namespace的引入,还可以实现非托管资源的释放,实现了IDisposiable的类在using中创建,using结 ...

  5. k3 cloud总账凭证点击保存的时候提示未将对象引用到对应的实例

    检查以后发现是创建日期的用了创建日期,修改了一下日期就可以了

  6. simple_pt时遇到的问题

    elf.c:30:18: fatal error: gelf.h: No such file or directory 安装libelf-dev 遇到找不到ldwarf apt-cache  sear ...

  7. shell函数与位置参数举例

  8. 解决git status中文路径乱码

    这个问题就放一张图吧: 不过需要注意,这样设置了之后对 git status 命令输出的路径就不做转义处理了,当路径中有空格等被terminal视为特殊字符的内容时不要直接复制粘贴使用.

  9. 批量定时任务将rtf文件转为docx,入参是rtf文件夹,生成一个docx文件夹

    java,python等语言对于rft的处理很受限,rtf提供了很少的api供外部调用处理,但是对于docx我们却又很多api来处理,所以很多人会有需求将rtf批量转为docx的需求,接下来就来说说解 ...

  10. 商城分类导航实现 (css)

    代码实例:demo.html <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...