文档章节

1.多线程编程基础整理--常用方法

匆匆-那年
 匆匆-那年
发布于 2017/02/23 11:46
字数 1007
阅读 6
收藏 0

常用方法

start()

启动线程。此方法调用标示当前线程处于可执行或立即执行状态(在此状态下isInterrupted()方法或interrupted()返回true),不能确保当前线程能立即执行,处于准备开始运行状态或者运行状态。

isAlive()方法用来判断当前线程是否为存活状态。存活状态是指当前线程处在已经启动但还未终止状态。线程处在准备开始运行状态和运行状态,则表示为存活状态。

interrupt()

停止线程。给当前线程打停止标识,但是执行此方法并不能保证当前线程何时停止。

通过Thread.interrupted()threadobj.isInterrupted()判断终止状态

Thread.interrupted()threadobj.isInterrupted()区别

  • Thread.interrupted()

    测试当前线程是否已经中断,并清除中断状态(即第一次调用已清除了中断状态之后,且第二次调用检验完中断状态前,且当前线程在此中断的情况除外),表现现象即为在执行第一次interrupted()返回的是true,之后第二次调用返回的为false。

  • threadobj.isInterruted()

    this.isInterrupted()threadObj.isInterrupted() 此方法不会清除中断状态。

stop()

强制停止线程执。该方法已经被jdk作废。此方法执行后,当前线程会抛出java.lang.ThreadDeath异常,此为error类型异常,一般不用捕获。

此方法可能导致清理工作无法执行以及强制解锁后出现的数据和执行目标数据不一致的情况。

常用以下方式停止线程:

  • return方式

    通过return方法跳出线程执行。

  • 异常法

    通过抛出java.lang.InterruptedException中断线程。

  • sleep()interrupt()

    先通过休眠线程,再执行中断方法则目标线程会直接抛出java.lang.InterruptedException: sleep interrupted(不管是先休眠再中断还是先中断再休眠都会抛出此异常信息)。

yield()

释放cpu资源。释放cpu资源来让给其他线程使用。不过可能会在释放完cpu资源后又立即获取cpu资源。

suspend()resume()

暂停/恢复线程执行。该方法已经被JDK作废。

该方法缺点:

  • 独占

    该方法极易造成同步对象的独占导致其他线程都无法访问公共同步对象。

  • 不同步

    在暂停和恢复的过程中可能导致目标数据不满足运行逻辑预期

setPriority()

设置线程优先级。现成默认提供1-10个预制优先级,优先级越大则执行时获取cpu资源的机会越大。

如果小于或大于此预制优先级则会抛出java.lang.IllegalArgumentException异常。

优先级的特性:

  • 继承

    线程间具有‘继承’特性。具体表现为如果线程A的优先级为6,则由线程A启动的线程B的优先级也是6。

  • 规则

    在多个不同优先级的相同线程对象执行的过程中,优先级高的总是大部分先执行完成,但不代表优先级高的总是先全部执行完成。即优先级大的线程执行所需的时间和抢夺锁成功的频率高于优先级小的线程。 当优先级差距过大时,代码执行的开始顺序和start的顺序无关。

  • 随机

    当优先级差距很近时,执行顺序可能随机出现。如同一个线程对象的2个实例,分别设置优先级为5和6,则执行过程中的顺序并不明显按照6优先级先执行的顺序出现,具有明显的随机性。

setDeamon()

设置线程为守护线程。JAVA中存在两种线程,一种是用户线程,一种是守护线程。当进程中不存在非守护线程时,守护线程会自动终止。典型的守护线程就是垃圾回收线程。

© 著作权归作者所有

共有 人打赏支持
匆匆-那年
粉丝 3
博文 1
码字总数 1007
作品 0
广州
私信 提问
嵌入式Linux学习基础规划篇

嵌入式的学习是需要日积月累的,是通过一点一滴的积累才能成为大神。下面来介绍一下嵌入式linux学习基础规划,目标是达到适应嵌入式应用软件开发、嵌入式系统开发或嵌入式驱动开发的基本素质...

创客学院
04/10
0
0
并行编程(Parallel Framework)

前言 并行编程:通过编码方式利用多核或多处理器称为并行编程,多线程概念的一个子集。 并行处理:把正在执行的大量的任务分割成小块,分配给多个同时运行的线程。多线程的一种。 并行编程分...

Jonins
09/22
0
0
java开发面试准备提纲

第一部分:java基础 JVM和GC:java虚拟机内存分配,类加载机制(双亲委派模型,Bootstrap Classloader, Extension ClassLoader, Application ClassLoader),Eden space,from space,to sp...

isam
2016/03/30
84
0
JavaSE和JavaEE的起步学习路线

Java javaSE部分 1)能够掌握DOS系统常用基本命令; 2)熟练使用eclipse编写java代码; 3)掌握常用数据结构和算法; 4)掌握常用的编程设计模式; 5)熟练使用java语言的常用对象; 6)使用java编...

Jasonisoft
2016/05/18
0
0
杭州* 中国安防研究院 招聘云计算平台开发工程师(欢迎有C++/JAVA基础的朋友加入)

欢迎热爱开源软件,有扎实C++/JAVA 基础的朋友加入我们的团队! 云计算平台开发工程师(5人) 岗位职责: 1、云计算应用产品和项目的架构设计、开发。 2、视频云存储系统框架设计、开发。 3、...

bess fang
2012/03/27
2K
16

没有更多内容

加载失败,请刷新页面

加载更多

以太坊PHP离线交易开发包

EthTool开发包适用于希望采用裸交易的PHP以太坊应用开发,主要包含以下特性: 支持裸交易部署/调用合约 内置etherscan和infura支持 keystore生成与读取,兼容geth/parity 采用裸交易的一个好...

笔阁
28分钟前
1
0
SRE的含义及与 DevOps 如何关联?

虽然站点可靠性工程师(site reliability engineer SRE)角色在近几年变得流行起来,但是很多人 —— 甚至是软件行业里的 —— 还不知道 SRE 是什么或者 SRE 都干些什么。为了搞清楚这些问题...

linuxCool
29分钟前
1
0
月入3万之一个程序员的转行坎坷历程

陈年往事 “我月入3万,怎么会少少了你一个鸡蛋啊?” 这是2017年9月左右的一个新闻,一位煎饼摊大妈因和顾客争执时脱口而出这样一句话而走红。当时还上了各大新闻的头条。 互联网兴起今天,...

苏南-首席填坑官
51分钟前
3
1
OSChina 周一乱弹 —— 眼看着这颗陨石砸了下来

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子:分享Nachtblut的单曲《Antik》 《Antik》- Nachtblut 手机党少年们想听歌,请使劲儿戳(这里) @mr_chip :上海的初雪之后有点冷 ...

小小编辑
今天
528
9
Confluence 6 修改导航显示选项

选择 子页面(Child pages)来在边栏中查看当前页面的子页面。 选择 页面树(Page tree)来查看整个空间的页面树,扩展当前的页面。 你也可以选择是否完全隐藏导航显示选项或者添加你希望可见...

honeymose
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部