线程常用操作
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的时间片。
- 点赞
- 收藏
- 关注作者
评论(0)