• 等待线程结束: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如果不考虑对象锁的情况下,功能基本一致

最新文章

  1. jQuery控制表头
  2. SparkConf加载与SparkContext创建(源码阅读二)
  3. 【SPOJ QTREE2】QTREE2 - Query on a tree II(LCA)
  4. node cheerio
  5. Hibernate+JPA
  6. android com.handmark.pulltorefresh 使用技巧
  7. 【Sort】QuickSort
  8. spring框架--IOC容器,依赖注入
  9. 201521123004 《Java程序设计》第3周学习总结
  10. 部署个人wordpress 笔记
  11. 【大数据技术】Sqoop
  12. python全栈开发笔记---------数据类型****整理****
  13. .NET自动化测试工具链:Selenium+NUnit+ExtentReport
  14. TF-IDF概念
  15. c#day03
  16. php Pthread 多线程 (三) Mutex 互斥量
  17. window对象中的一些重要的属性和方法(笔记)
  18. javaScript一些需要注意的细节
  19. kafka操作清单
  20. 菜单和按钮-EasyUI Menu 菜单、EasyUI Linkbutton 链接按钮、EasyUI Menubutton 菜单按钮、EasyUI Splitbutton 分割按钮

热门文章

  1. 最小生成树(prim和Kruskal操!!SB题)
  2. [NOIP2016]借教室
  3. redis 哨兵配置文件解读sentinel.conf
  4. hdu5943 Kingdom of Obsession 二分图+打表找规律
  5. NGUI技能CD效果制作(sprite的type:filled)
  6. 攻防世界--Shuffle
  7. [转载]Redux原理(一):Store实现分析
  8. linux下创建svn仓库及用户
  9. 【LeetCode】贪心 greedy(共38题)
  10. Sass函数:数字函数-round()函数