Java:线程常用方法

join方法

 

join方法:执行该方法的线程进入阻塞状态,直到调用该方法的线程结束后再由阻塞转为就绪状态

 

 

 

注:当循环执行到i2时该行代码执行,CounterThread所创建线程进入阻塞状态,直到timeThread变量所对应线程结束,    CounterThread所创建线程才能再次进入就绪状态,进而进入执行状态。

 

注意:

线程对象在调用join方法前必须先调用start方法,否则该线程永远不会进入执行状态。

 

 

注:由于时间线程对象调用join方法之前没有调用start方法,所以时间线程使用没有执行。

 

interrupt方法

 

interrupt方法:

结束线程在调用Object类的wait方法或该类的join方法、sleep方法过程中的阻塞状态,并在调用waitjoinsleep方法处产生InterruptedException异常。

 

注:理论上beforeTimeafterTime应该相差30秒,但因为该线程类的对象在1秒后执行了interrupt方法而使得该线程对象提前结束了阻塞状态,从而导致了beforeTimeafterTime相差少于30

 

注:理论上beforeTimeafterTime应该相差30秒,但因为该线程类的对象在1秒后执行了interrupt方法而使得该线程对象提前结束了阻塞状态,从而导致了beforeTimeafterTime相差少于30

 

 

注:当线程执行该行代码后,线程进入阻塞状态;但由于10秒后主线程执行了“counterThread.interrupt();”代码使得该线程阻塞状态结束。该行代码的执行会结束counterThread线程的阻塞状态。

 

 

 

注:

计数器线程执行该行代码后进入阻塞状态,时间线程至少需要消耗30秒才能结束,而15秒后计数器线程调用了interrupt方法致使该计数器线程提前结束阻塞状态。

 

setDaemon方法

 

setDaemon方法:用于将一个尚未调用线程start方法的线程设置为守护线程。守护线程主要用于为其他线程的运行提供服务(Java中的垃圾回收机制就是守护线程),这种线程属于创建它的线程,守护线程随着主线程的终止而终止。

 

注:守护线程不是将原来线程改为守护线程,而是本来就是守护线程,别忘了setDaemon方法需要在start方法之前调用。设置本线程为守护线程。

 

注意:

线程中所启动的其他非守护线程线程不会随着该线程的结束而结束。(参见代码2

 

currentThread方法

 

currentThread方法:返回当前正在执行的线程对象。

 

注:返回正在执行main方法的线程对象——主线程

 

注意:

请判读备注中代码1、代码2、代码3和代码4

 

注:通过运行结果可以发现此方法被一个名为“时间线程”的线程执行

 

 

isAlive方法

 

isAlive方法:判定该线程是否处于就绪、运行或阻塞状态,如果是则返回true,否则返回false

 

注:当打印线程阻塞时程序一定会先执行main方法中的输出语句,此时输出true;当打印线程阻塞状态结束,此时输出false,由此可见main方法中启动的线程可能晚于主线程结束。

 

其它方法

 

1.void start():使该线程开始启动,Java 虚拟机负责调用该线程的 run() 方法。多次启动一个线程是非法的。

 

2.void sleep(long millis):Thread类静态方法,线程进入阻塞状态,在指定时间(单位为毫秒)到达之后进入就绪状态(Runnable),而非立即进入执行状态。

 

3.void yield():静态方法,当前线程放弃占用CPU资源,回到就绪状态,使其他优先级不低于此线程的线程有机会被执行。

 

4.void setPriority(int newPriority):设置当前线程的优先级,线程优先级越高,线程获得执行的次数越多,Java线程的优先级用整数表示,取值范围是1~10,Thread类有以下三个静态常量:

 

static int MAX_PRIORITY   最高优先级值为10;

 

static int NORM_PRIORITY   默认优先级值为5;

 

static int MIN_PRIORITY   最低优先级值为1;

 

5.int getPriority():获得当前线程的优先级。

 

终止线程——无疾而终

 

 

 

 

终止线程——暴毙身亡

 

注:巧妙利用线程对象调用interrupt方法时会引发异常而使得死循环中止

 

注:巧妙利用线程对象调用interrupt方法时会引发异常而使得死循环中止

 

 

 

posted @ 2018-11-09 23:39  龙雪  阅读(183)  评论(0编辑  收藏  举报