join线程

在某个线程的执行流中调用其他线程的join()方法时,调用线程将被阻塞,直到被join()方法加入的线程完成为止。

join()方法有三种重载形式:

  • join():等待被join的线程执行完成;
  • join(long millis):等待被join线程执行时间最长为millis毫秒。如在millis毫秒内,被join的线程未执行完成,则不再继续等待。
  • join(long millis,  int nanos):等待被join的线程执行时间为millis毫秒+nanos微秒。

后台线程

后台线程(Deamon Thread)又被称为“精灵线程”或“守护线程”。JVM的垃圾回收线程就是典型的后台线程。

后台线程主要特征:如果所有前台线程都死亡,后台线程会自动死亡。

关于后台线程:

  • 调用Thread对象的setDeamon(true)可以将指定线程设置成后台线程;
  • setDeamon(true)必须在start()方法之前调用,否则会引发IllegalThreadStateException异常;
  • Thread类提供了isDeamon()方法判断是否是后台线程;
  • 前台线程创建的子线程默认是前台线程,后台线程创建的子线程默认是后台线程。

线程睡眠

Thread类的Sleep()方法可以使正在执行的线程暂停一段时间,并进入阻塞状态。

在线程sleep时间段内,即使系统中没有其它可运行的线程,处于sleep中的线程也不会运行。

线程让步

yield()也是Thread类的一个方法。同sleep()类似,它也可以让一个线程暂停。但是,它不会阻塞线程,而是直接让线程进入就绪状态,重新等待系统调度器的调度。

实际上,当某个线程调用了yield()方法后,只有优先级与当前线程相同或高于当前线程的处于就绪状态的其他线程才能获得执行的机会。

sleep()和yield()的区别:

  • sleep暂停线程后,会给其它线程执行机会,不会理会其他线程的优先级;yield暂停线程后,只会给优先级相同或优先级更高的其他线程机会;
  • sleep会将线程转入阻塞状态;yield会将线程直接转入就绪状态;
  • sleep方法跑出了InterruptedException,yield方法没有抛出任何异常;
  • sleep方法移植性更好。

线程优先级

每个线程执行时都有一定的优先级,优先级高的线程获得更多的执行机会,优先级低的线程获得较少的执行机会。

Thread提供了setPriority和getPriority方法来设置和获取线程优先级。

Java多线程 - 控制线程的更多相关文章

  1. Java多线程之线程的控制

    Java多线程之线程的控制 线程中的7 种非常重要的状态:  初始New.可运行Runnable.运行Running.阻塞Blocked.锁池lock_pool.等待队列wait_pool.结束Dea ...

  2. Java多线程之线程的通信

    Java多线程之线程的通信 在总结多线程通信前先介绍一个概念:锁池.线程因为未拿到锁标记而发生的阻塞不同于前面五个基本状态中的阻塞,称为锁池.每个对象都有自己的锁池的空间,用于放置等待运行的线程.这些 ...

  3. java多线程与线程间通信

    转自(http://blog.csdn.net/jerrying0203/article/details/45563947) 本文学习并总结java多线程与线程间通信的原理和方法,内容涉及java线程 ...

  4. Java多线程之线程协作

    Java多线程之线程协作 一.前言 上一节提到,如果有一个线程正在运行synchronized 方法,那么其他线程就无法再运行这个方法了.这就是简单的互斥处理. 假如我们现在想执行更加精确的控制,而不 ...

  5. Java多线程之线程的暂停

    Java多线程之线程的暂停 下面该稍微休息一下了呢……不过,这里说的是线程休息,不是我们哦.本节将介绍一下让线程暂停运行的方法. 线程Thread 类中的sleep 方法能够暂停线程运行,Sleep ...

  6. Java 多线程:线程池

    Java 多线程:线程池 作者:Grey 原文地址: 博客园:Java 多线程:线程池 CSDN:Java 多线程:线程池 工作原理 线程池内部是通过队列结合线程实现的,当我们利用线程池执行任务时: ...

  7. Java多线程之线程其他类

    Java多线程之线程其他类 实际编码中除了前面讲到的常用的类之外,还有几个其他类也有可能用得到,这里来统一整理一下: 1,Callable接口和Future接口 JDK1.5以后提供了上面这2个接口, ...

  8. Java多线程之线程的同步

    Java多线程之线程的同步 实际开发中我们也经常提到说线程安全问题,那么什么是线程安全问题呢? 线程不安全就是说在多线程编程中出现了错误情况,由于系统的线程调度具有一定的随机性,当使用多个线程来访问同 ...

  9. Java多线程父子线程关系 多线程中篇(六)

    有的时候对于Java多线程,我们会听到“父线程.子线程”的概念. 严格的说,Java中不存在实质上的父子关系 没有方法可以获取一个线程的父线程,也没有方法可以获取一个线程所有的子线程 子线程的消亡与父 ...

随机推荐

  1. 160809、tomcat中配置多个域名及将tomcat配置成系统服务

    本地测试用的(注意红色部分) 第一步.自己的windows电脑,在c盘中有个hosts文件(搜索一下),做以下修改(其中127.0.0.1是本机地址,192.1638.10.139是我虚拟机中linu ...

  2. java根据方法名动态调用invoke方法!

    public class Activity { public void deal(String name, long id) { System.out.println(name + id + &quo ...

  3. 1 duilib 自绘标题 最大化图标显示bug ----WindowImplBase的bug

    窗口最大化之后有两个问题,     1.最大化按钮的样式还是没变,正确的样式应该是这样的     2.再次点击最大化按钮,不能还原到正常大小.     这个是WindowImplBase的bug,已经 ...

  4. spring 实现定时任务

    spring实现定时任务超级简单.比使用quartz简单,比使用timer强大.如下是一个简单的springboot任务,启用了定时任务 @SpringBootApplication@Componen ...

  5. SQL SERVER常见等待——解决会话等待产生的系统问题

    SQL SERVER——解决会话等待产生的系统问题 转自: https://blog.csdn.net/z_cloud_for_SQL/article/details/55051215 版权声明:SQ ...

  6. Python基础-面向对象1

    class Bar: def fansik(self, name, age): print(name, age) obj = Bar() print(obj.fansik('fanjinbao', 1 ...

  7. JetBrains ReSharper 8.2 Build 8.2.0.2160 && StyleCop

    先安装 StyleCop 再安装 JetBrains ReSharper 8.2 Build 8.2.0.2160

  8. boost shared_ptr weak_ptr

    文档: http://www.boost.org/doc/libs/1_57_0/libs/smart_ptr/shared_ptr.htm shared_ptr构造有个原型 template< ...

  9. go——函数

    1.定义 函数是结构化编程的最小单元模式.它将复杂的算法过程分解为若干个较小任务,隐藏相关细节,使程序结构更加清晰,易于维护.函数被设计成相对独立,通过接收输入参数完成一段算法指令,输出或存储相关结果 ...

  10. PAT 天梯赛 L1-045. 宇宙无敌大招呼 【水】

    题目链接 https://www.patest.cn/contests/gplt/L1-045 AC代码 #include <iostream> #include <cstdio&g ...