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. mysql聚合函数操作

    1.mysql对中文进行排序 注:是用convert函数用gb2312编码转换 SELECT * FROM 表名 ORDER BY CONVERT(字段名 USING gb2312 ) ASC;

  2. sql server升级打补丁

    原本:https://blog.csdn.net/kk185800961/article/details/72436415 sql server升级 sql server打补丁 sql server升 ...

  3. Tomcat 自定义默认网站目录

    上面访问的网址为http://192.168.0.108:8080/memtest/meminfo.jsp 需求: 现在我想访问格式为http://192.168.0.108:8080/meminfo ...

  4. is和==

    ==判断两个对象值是否相等 is表示两个变量是否指向一块对象

  5. 第五课 Makefile文件的制作(补充)

    序言: 前面的几节课讲解Makefile的一些基本知识也做了一些小例子实践了几下,那么到现在普通的练习则是没有问题.但是如果做项目文件较多又分层次等等还是会碰上好多问题的,这节课补充一些知识. 知识点 ...

  6. 初学hadoop的个人历程

       在学习hadoop之前,我就明确了要致力于大数据行业,成为优秀的大数据研发工程师的目标,有了大目标之后要分几步走,然后每一步不断细分,采用大事化小的方法去学习hadoop.下面开始叙述我是如何初 ...

  7. cdoj1339郭大侠与线上游戏

    地址:http://acm.uestc.edu.cn/#/problem/show/1339 题目: 郭大侠与线上游戏 Time Limit: 6000/2000MS (Java/Others)    ...

  8. HDU - 6406 Taotao Picks Apples (RMQ+dp+二分)

    题意:N个高度为hi的果子,摘果子的个数是从位置1开始从左到右的严格递增子序列的个数.有M次操作,每次操作对初始序列修改位置p的果子高度为q.每次操作后输出修改后能摘到得数目. 分析:将序列分为左.右 ...

  9. js踩过的一些坑

    参考我的博客:http://www.isedwardtang.com/2017/08/29/js-bug/

  10. $python数据分析基础——初识numpy库

    numpy库是python的一个著名的科学计算库,本文是一个quickstart. 引入:计算BMI BMI = 体重(kg)/身高(m)^2 假如有如下几组体重和身高数据,让求每组数据的BMI值: ...