线程常用操作

举报
qimiao2111 发表于 2021/01/25 15:56:57 2021/01/25
【摘要】 1、currentThread()方法该方法返回当前代码段正在被调用的线程信息例如:Thread.currentThread().getName() 获取当前线程名称。2、isAlive()方法该方法功能是判断当前线程是否处于活动状态活动状态是指线程已经启动且尚未终止。线程处于正在运行或准备开始运行的状态,就任务线程是存活的。3、sleep()方法该方法功能是在执行的毫秒数内让当前“正在执行...

1、currentThread()方法

该方法返回当前代码段正在被调用的线程信息

例如:Thread.currentThread().getName() 获取当前线程名称。

2、isAlive()方法

该方法功能是判断当前线程是否处于活动状态

活动状态是指线程已经启动且尚未终止。线程处于正在运行或准备开始运行的状态,就任务线程是存活的。

3、sleep()方法

该方法功能是在执行的毫秒数内让当前“正在执行的线程”休眠(暂停执行)

使用方法: Thread.sleep(10)   

检测异常:使用sleep()方法会抛出 InterruptedException 异常。

4、getId()方法

该方法取得当前线程的唯一标识

使用方法:Thread.currentThread().gitId()

5、停止线程

停止线程方法

a、使用退出标志,是线程正常退出,也就是当run方法完成后线程终止。

b、使用stop方法终止线程,但是不推荐这个方法。因为stop和supend及resume一样,都是作废过期的方法,使用它们可能产生不可预料的结果。

c、使用interrupt方法终端线程

调用interrupt()方法并不是停止线程,而仅仅是在当前线程中大了一个停止标记。

判断线程是否停止状态

this.interrupted():测试当前线程是否已经中断。

interrupted()方法具有清除状态的功能,执行次方法后具有将状态标识置清除为false的功能。

this.isInterrupted():测试线程是否已经中断。

isInterrupted()方法测试对象是否已经是中断状态,但不会清除状态标志。

能停止的线程--异常法

判断this.interrupted()为true,直接抛出异常 thorw new InterruptedException()终止线程执行。

沉睡中停止

a、在sleep状态下停止"thread.interrupt()"某一线程,会直接进入catch语句,并清除停止状态值,使之变成false。

b、先执行"thread.interrupt()"停止线程,而thread线程回正常执行,直到遇到thread线程sleep(),会直接进入catch语句。并清除停止状态值,使之变成false。

能停止的线程--暴力停止

使用stop()方法停止线程是非常暴力的,不推荐使用。

调用stop()方法时会抛出java.lang.ThreadDeath异常,通常情况下,此异常不需要显示的捕获。

stop()方法已经作废,因为如果前置线程停止则有可能使一些请理性工作得不到完成。另外一个情况就是对锁定的对象进行”解锁“,导致数据不同步处理,出现数据不一致问题。如果出现这样的情况,程序处理的数据就有可能遭到破坏,最终导致程序执行流程错误,一定要特别注意。

使用return停止线程

将interrupt()与return 结合使用也能实现停止线程的效果。不过还是建议使用”抛异常“的方法来实现线程的停止,因为在catch块中还可以将异常向上抛出,是线程停止的事件得以传播。

6、暂停线程

suspend()方法暂停线程,用resume()方法恢复线程

暂停线程意味着线程还可以恢复运行。可以使用suspend()方法暂停线程,使用resume()方法恢复线程的执行。

使用susped与resume方法的缺点

使用susped与resume方法时,如果使用不当,极易造成公共的同步对象的独占,使得其他线程无法访问公共同步对象。

使用susped与resume方法时,也容易以为线程的暂停而导致数据不同步的情况。

7、yield()方法

yield()方法的作用是放弃当前的CPU资源,将它让给其他的任务去占用CPU执行时间。但是放弃的时间不确定,有可能刚刚放弃马上又获得CPU的时间片。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。