Java线程

来源:互联网 发布:owncloud数据库配置 编辑:程序博客网 时间:2024/06/06 01:22

线程的状态:
新创建(NEW)、可运行(RUNNABLE)、阻塞(BLOCKED)、等待(WAITING)、计时等待(TIME_WAITING)、被终止(TERMINATED)。5个状态。
中断线程:
方法1:
interrupt()//这个方法是请求终止线程的,并不是强制性的,(stop方法之前是强制性的现在已经废弃了),当调用这个方法的时候点成的 中断状态 被置位,这是个boolean标志。而每个线程都会不停地检查这个线程来判断这个位来判断线程是否被中断了。
方法2:
可以调用Thread.currentThread().isInterrupted()来判断当前线程是否已经被中断。但是任何对任何已经阻塞的线程(调用sleep和wait会引起线程阻塞)调用这个方法检测中断状态是都会产生InterrupedException异常。
说明:在中断状态已被置位的时候调用sleep(或者其他可中断的方法)不会使其休眠反而会消除掉它的已中断状态并且会触发InterruptedException。
阻塞和等待
什么是阻塞:简单说阻塞是在资源发生争夺的时候后来的进程会进行阻塞。
什么是等待:简单说等待是等前一个的结果。
计时等待:顾名思义就是掐着表等着,或者是接收到适当的通知后等待状态消除。可以产生计时等待的额方法有:Thread.sleep ,Object.wait,Thread.join,Lock.tryLock和Condition.await的计时版。
当一个线程被激活之后会检查是否它的优先权比当前的优先权高,如果是的话调度器就会从当前的运行的线程中挑选一个,剥夺其运行权,选择这个新的线程运行。
线程的死亡:
1:线程的自然死亡就是run()方法运行完毕。
2:由于一个没有捕获到的异常而终止了run()方法而以外死亡。
Java.lang.Thread 中的void join()方法:等待终止指定的线程;void join(long millis):指定millis秒后指定的线程死亡。
3:Thread.State的getState()方法获得线程状态
过时函数:
java.lang.Thread
void stop()手动终止一个线程
void suspend()暂停
void resume()恢复一个线程,在调用suspend()之后调用的。
–本文部分观点来自java核心技术第九版和Java编程思想第四版

0 0