java多线程之12 关于多线程上的一些没用过的方法(如何获取当前线程)(阻塞方法对线程的影响)

本文详细介绍了如何获取Java中当前运行的线程,通过Thread.currentThread()方法可以获取到正在执行的线程对象。同时,讲解了阻塞方法的概念,如sleep()方法可以使线程挂起一段时间,而suspend()和resume()方法虽然已被废弃,但阐述了线程中断与恢复的基本思想。
摘要由CSDN通过智能技术生成

1如何获取当前线程

Thread类有一个静态方法 static method叫做 currentThread()方法,它会获得当前运行的进程中正在获得系统资源并在运行其run()方法的那个线程对象的引用.

范例代码

public class MyThread extends Thread{

public void run(){
if(Thread.currentThread()!=this){

throw new IllegalStateException("run method called by incorrect thread");


}

...main logic...

}


}

____________________________________________


例二
在Runnable对象上观察它自己是否被中断

public class MyRunnable implements Runnable{

public void run(){

while(!Thread.currentThread().isInterrupted()){//当当前线程(线程对象,任务性质的线程对象)没有被中断的情况下运行while循环的循环体中的代码

.....main logic .....


}

}


}


用法总结:
我们可以使用Thread.currentThread()来获得当前程序正在执行的thread对象的引用以便利用该引用(对象的引用),去调用该当前线程对象所具有的其他成员方法。

————————————————————————————

2什么是阻塞类型的方法?
当一个方法会阻塞住它所在线程的执行,换句话说的一个方法梗塞住了不动了它在等待某一个事情的发生在这期间该方法下一行代码无法被执行,因为这个梗塞的方法还没有完成它自己的使命(还没有被执行完)使得它的后续命令行(指令语句)无法被顺次执行,从而使得该方法所在的线程体被阻塞(BLOCK)(属于正常现象),即blocking method(阻塞方法)会
block(阻塞)住它所在的线程体(thread 的run方法体)的继续执行直到该阻塞方法要等待的某件事发生完为止,(当该阻塞方法被完全执行完毕后其后续指令行语句才会被顺次执行,继而该阻塞方法所在的线程体才得以继续执行已达到完成的目的) (有的死锁情况就是由阻塞方法被阻断后导致线程体跑不下去导致的)

——————————————————————————————————

thread是可以通过调用sleep()方法来挂起自己的执行动作一段指定的期间。当thread对象执行到sleep()方法时,它会在所谓的沉睡时间暂停所给数目的毫秒时间,当暂停时间已经到时,该 thread会被叫醒并继续执行sleep()方法下一行的语句。 

严格来讲sleeping与thread的suspension是两回事。其中一个重要的差别是,真正的suspension会由某个外部 Thread类型对象去suspend(且稍后会resume)另外一个Thread对象。 而sleep()方法仅仅会影响到执行这个sleep()方法的那个Thread对象而不会影响到另外一个Thread对象。(一个Thread对象只能够让自己sleep(),不能让另外一个thread对象sleep())
 

首先要知道suspend方法和resume方法是一对固定搭配
一旦thread开始执行它的run()方法,它会持续执行到run()完成为止。如果你熟悉其它Thread model,可能早已经知道“Thread suspendsion”的概念,意思就是一个Thread thread1 被另一个Thread thread2 告知要使得thread1要被暂停执行它的执行动作。稍后thread1会被恢复,也就是被告知继续它的执行动作。
注意:Thread class具有suspend()和resume()方法,他们同样遭遇到了 stop()方法的race condition问题的干扰,所以实际上这三个方法
suspend(),resume(),和stop()早已经被java api 废弃掉了。

因此Thread的中断与恢复采用了新的一个机制——————“等待”与“通知”机制来实现thread的中断与恢复,而不是采用从其他的Thread对象调用suspend()和resume()方法来实现对另一个thread的中断与恢复。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值