Java多线程 - 控制线程
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多线程 - 控制线程的更多相关文章
- Java多线程之线程的控制
Java多线程之线程的控制 线程中的7 种非常重要的状态: 初始New.可运行Runnable.运行Running.阻塞Blocked.锁池lock_pool.等待队列wait_pool.结束Dea ...
- Java多线程之线程的通信
Java多线程之线程的通信 在总结多线程通信前先介绍一个概念:锁池.线程因为未拿到锁标记而发生的阻塞不同于前面五个基本状态中的阻塞,称为锁池.每个对象都有自己的锁池的空间,用于放置等待运行的线程.这些 ...
- java多线程与线程间通信
转自(http://blog.csdn.net/jerrying0203/article/details/45563947) 本文学习并总结java多线程与线程间通信的原理和方法,内容涉及java线程 ...
- Java多线程之线程协作
Java多线程之线程协作 一.前言 上一节提到,如果有一个线程正在运行synchronized 方法,那么其他线程就无法再运行这个方法了.这就是简单的互斥处理. 假如我们现在想执行更加精确的控制,而不 ...
- Java多线程之线程的暂停
Java多线程之线程的暂停 下面该稍微休息一下了呢……不过,这里说的是线程休息,不是我们哦.本节将介绍一下让线程暂停运行的方法. 线程Thread 类中的sleep 方法能够暂停线程运行,Sleep ...
- Java 多线程:线程池
Java 多线程:线程池 作者:Grey 原文地址: 博客园:Java 多线程:线程池 CSDN:Java 多线程:线程池 工作原理 线程池内部是通过队列结合线程实现的,当我们利用线程池执行任务时: ...
- Java多线程之线程其他类
Java多线程之线程其他类 实际编码中除了前面讲到的常用的类之外,还有几个其他类也有可能用得到,这里来统一整理一下: 1,Callable接口和Future接口 JDK1.5以后提供了上面这2个接口, ...
- Java多线程之线程的同步
Java多线程之线程的同步 实际开发中我们也经常提到说线程安全问题,那么什么是线程安全问题呢? 线程不安全就是说在多线程编程中出现了错误情况,由于系统的线程调度具有一定的随机性,当使用多个线程来访问同 ...
- Java多线程父子线程关系 多线程中篇(六)
有的时候对于Java多线程,我们会听到“父线程.子线程”的概念. 严格的说,Java中不存在实质上的父子关系 没有方法可以获取一个线程的父线程,也没有方法可以获取一个线程所有的子线程 子线程的消亡与父 ...
随机推荐
- Openstack创建镜像
如何创建生产用的Openstack镜像 参考官方文档https://docs.openstack.org/image-guide/centos-image.html 1,创建虚拟机硬盘 qemu-im ...
- HYSBZ 2160 拉拉队排练(回文树)
2160: 拉拉队排练 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 825 Solved: 324 [Submit][Status][Discu ...
- Word Formation
构词 Word Formation 1.派生Derivation 2.合成Compounding 3.截短Clipping 4.混合Blending 1派生Derivation 1).前缀 除少数英语 ...
- iOS核心动画详解(一)
前言 这篇文章主要是针对核心动画(Core Animation)的讲解,不涉及UIView的动画.因为内容较多,这篇文章会分为几个章节来进行介绍.本文主要是介绍核心动画的几个类之间的关系和CAAnim ...
- Oracle数据库命令行下数据的导入导出
//设置导入导出字符集,导入导出都要设置一下 export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK //导出 exp system/oracle@orcl file=/u ...
- 2015-03-12——简析DOM2级事件
DOM2级事件 事件的几种类型:对象事件,鼠标事件,键盘事件,表单事件,W3CDOM事件,以及针对浏览器的事件. 对象事件:window对象,也是javascript对象.load 适用于windo ...
- JS和CSS的初步入门(JS可以取得所有p的内容并显示)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DT ...
- Android项目使用Ant多渠道打包(最新sdk)
参考文章: http://blog.csdn.net/liuhe688/article/details/6679879 http://www.eoeandroid.com/thread-323111- ...
- (转)java类到底是如何加载并初始化的?
Java虚拟机如何把编译好的.class文件加载到虚拟机里面?加载之后如何初始化类?静态类变量和实例类变量的初始化过程是否相同,分别是如何初始化的呢?这篇文章就 是解决上面3个问题的. 若有不正之处, ...
- git rm与直接rm的区别
git rm 行为: 1.删除一个文件 2.将被删除的这个文件纳入缓存区 $ git rm a rm 'a' $ git status On branch master Changes to be c ...