文档章节

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

匆匆-那年
 匆匆-那年
发布于 2017/02/23 11:46
字数 1007
阅读 6
收藏 0
点赞 0
评论 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
java开发面试准备提纲

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

isam
2016/03/30
84
0
学Android开发,入门语言java知识点

Android是一种以Linux为基础的开源码操作系统,主要使用于便携设备,而linux是用c语言和少量汇编语言写成的,如果你想研究Android,就去学java语言吧。 Android开发入门教程 -Java语言,最差...

抉择很难
2015/12/11
130
0
C# WinForm开发系列 - Thread/Delegate/Event

C#是一门支持多线程的语言,因此线程的使用也是比较常见的。由于线程的知识在Win32编程的时候已经说得过多,所以在.Net中很少介绍这部分(可能.Net不觉得这部分是它所特有的)。那我们为什么...

长征2号
2017/10/11
0
0
JavaSE和JavaEE的起步学习路线

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

Jasonisoft
2016/05/18
0
0
Python学习之路和我发布过的Python脚本博文前端项目

Python学习之路 目录 Python学习之路【第一篇】:流程控制,用户交互,语法要求,变量,字符,注释,模块导入的使用 Python学习之路【第二篇】:文件,字符串,列表,元组,字典,集合的使用 Python学习...

yht_1990
2016/07/17
0
0
ios的线程和同步异步操作

ios的线程和同步异步操作 ios的线程和同步异步操作 ios的多线程,同步异步操作,都是我们日常的开发中经常会遇到的问题,本文把常见的ios线程,同步异步的操作进行了整理。 代码下载: 我博客...

lewis-180
2015/12/08
57
0
python资料全集

python: 微信公众号开发小记——2.80端口上的服务 python: 微信公众号开发小记——3.接入三方登录 使用python编写一个壁纸网站的简单爬虫 python: python List 用法 Python 中各个时间复杂度...

d_watson
2016/04/15
175
0
Intel 软件开发技术概要与在开发中的运用(讲解并行计算,多核心优化,以及Intel开发工具)

英特尔有下列牛逼的开发工具与辅助套件,如何应用到实践中去,让自己的软件变得更加大,软件开发更加容易,软件拥有更多的性能呢 英特尔® 图形性能分析器 3.0 英特尔® Cloud Builder 英特尔...

junwong
2012/03/09
0
0
如何判断你是合格的高级iOS开发工程师?

前言 随着移动互联网的高速发展泄洪而来,有意学习移动开发的人越来越多了,竞争也是越来越大,需要学习的东西很多。如何才能在激烈的移动开发者竞争中一枝独秀,成为一名真正合格的高级iOS...

_小迷糊
05/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

shell中的函数、shell中的数组、告警系统需求分析

shell中的函数 格式: 格式: function f_name() { command } 函数必须要放在最前面 示例1(用来打印参数) 示例2(用于定义加法) 示例3(用于显示IP) shell中的数组 shell中的数组1 定义数...

Zhouliang6
今天
2
0
用 Scikit-Learn 和 Pandas 学习线性回归

      对于想深入了解线性回归的童鞋,这里给出一个完整的例子,详细学完这个例子,对用scikit-learn来运行线性回归,评估模型不会有什么问题了。 1. 获取数据,定义问题     没有...

wangxuwei
今天
1
0
MAC安装MAVEN

一:下载maven压缩包(Zip或tar可选),解压压缩包 二:打开终端输入:vim ~/.bash_profile(如果找不到该文件新建一个:touch ./bash_profile) 三:输入i 四:输入maven环境变量配置 MAVEN_HO...

WALK_MAN
今天
0
0
33.iptables备份与恢复 firewalld的9个zone以及操作 service的操作

10.19 iptables规则备份和恢复 10.20 firewalld的9个zone 10.21 firewalld关于zone的操作 10.22 firewalld关于service的操作 10.19 iptables规则备份和恢复: ~1. 保存和备份iptables规则 ~2...

王鑫linux
今天
2
0
大数据教程(2.11):keeperalived+nginx高可用集群搭建教程

上一章节博主为大家介绍了目前大型互联网项目的系统架构体系,相信大家应该注意到其中很重要的一块知识nginx技术,在本节博主将为大家分享nginx的相关技术以及配置过程。 一、nginx相关概念 ...

em_aaron
今天
1
0
Apache Directory Studio连接Weblogic内置LDAP

OBIEE默认使用Weblogic内置LDAP管理用户及组。 要整理已存在的用户及组,此前办法是导出安全数据,文本编辑器打开认证文件,使用正则表达式获取用户及组的信息。 后来想到直接用Apache Dire...

wffger
今天
2
0
HFS

FS,它是一种上传文件的软件。 专为个人用户所设计的 HTTP 档案系统 - Http File Server,如果您觉得架设 FTP Server 太麻烦,那么这个软件可以提供您更方便的档案传输系统,下载后无须安装,...

garkey
今天
1
0
Java IO类库之BufferedInputStream

一、BufferedInputStream介绍 /** * A <code>BufferedInputStream</code> adds * functionality to another input stream-namely, * the ability to buffer the input and to * sup......

老韭菜
今天
0
0
STM 32 窗口看门狗

http://bbs.elecfans.com/jishu_805708_1_1.html https://blog.csdn.net/a1985831055/article/details/77404131...

whoisliang
昨天
1
0
Dubbo解析(六)-服务调用

当dubbo消费方和提供方都发布和引用完成后,第四步就是消费方调用提供方。 还是以dubbo的DemoService举例 -- 提供方<dubbo:application name="demo-provider"/><dubbo:registry address="z...

青离
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部