> 生活笔记  > python
java多线程学习笔记-2

中断线程

当线程的run方法执行方法体中最后一条语句后,并经由执行return语句返回时,或者出现了在方法中没有捕获的异常时,线程将终止。在早期版本中,还有一个stop方法,其他线程可以调用它终止线程。但是,这个方法现在已经被弃用了。

没有可以强制线程终止的方法。然而,interrupt方法可以用来请求终止线程。

当对一个线程调用interrupt方法时,线程的中断状态将被置位。这是每一个线程都具有的boolean标志。每个线程都应该不时地检查这个标志,以判断线程是否被中断。要想弄清中断状态是否被置位,首先调用静态的Thread.currentThread方法获得当前线程,然后调用isInterrupted method方法。但是,如果线程被阻塞,就无法检测中断状态。当在一个被阻塞的线程上调用interrupt方法时,阻塞调用将会被Interrupted Exception异常中断。

void interrupt()//向线程发送中断请求。线程的中断状态将被设置为true。如果目前该线程被一个sleep调用阻塞,InterruptException将被抛出。
static boolean interrupted()//测试当前线程是否被中断。这一调用会将当前线程的中断重置为false
boolean isInterrupted()//测试线程是否被终止,不改变中断状态
static Thread currentThread()//返回代表当前执行线程的Thread对象

线程状态

线程可以有6中状态:

①New(新创建)

②Runnable(可运行)

③Blocked(被阻塞)

④Waiting(等待)

⑤Timed waiting(计时等待)

⑥Terminated(被终止)

当用new操作符创建一个新线程是,该线程还没有开始运行,这意味着它的状态是new。

一旦调用start方法,线程处于Runnable状态。

当线程处于被阻塞或等待状态是,它暂时不活动。它不运行任何代码且消耗最少的资源。那么它是怎样达到这种状态的呢?

当一个线程试图获取一个内部的对象锁,而该锁被其他线程持有,则该线程进入阻塞状态。

当线程等待另一个线程通知调度器一个条件是,它自己进入等待状态。

有几个方法有一个超时参数,调用它们导致线程进入计时等待状态。

线程因两个原因而被终止:

1.因为run方法正常退出而自然死亡。

2.因为一个没有捕获的异常终止了run方法而意外死亡。

在Java程序设计语言中每一个线程有一个优先级。这里不再赘述。

守护线程

可以通过调用

t.setDaemon(true);//这一方法必须在线程启动之前调用

将线程转换为守护线程。守护线程的唯一用途是为其他线程提供服务。计时线程就是一个例子。

0条评论
猜你喜欢
精品推荐
扫二维码,加好友一起学习吧!