Thread类常见方法:
创建、启动线程、终止线程、线程等待、获取线程实例、线程休眠
1.关于如何创建线程,在专栏的上一篇文章已经谈到了有5中创建线程的方式。
2.启动线程(t.start):调用 start 方法, 才在操作系统的底层创建出一个线程。
3.终止线程
停止线程的方式目前常见的有两种方法:
1. 通过共享的标记来进行沟通(需要给标志位上加 volatile 关键字)
2. 调用 interrupt()方法来通知
方法 | 说明 |
public void interrupt() | 中断对象关联的线程,如果线程正在阻塞,则以异常方式通知,否则设置标志位 |
public static boolean interrupted() | 判断当前线程的中断标志位是否设置,调用后清除标志位 |
public boolean isInterrupted() | 判断对象关联的线程的标志位是否设置,调用后不清除标志位 |
thread 收到通知的方式有两种:
1. 如果线程因为调用 wait/join/sleep 等方法而阻塞挂起,则以 InterruptedException 异常的形式通知,清除中断标志。当出现 InterruptedException 的时候, 要不要结束线程取决于 catch 中代码的写法,可以选择忽略这个异常, 也可以结束线程。
2.当线程没有阻塞时,那么这个时候只是内部的一个中断标志被设置,thread 可以通过
Thread.interrupted() 判断当前线程的中断标志被设置,清除中断标志。
Thread.currentThread().isInterrupted() 判断指定线程的中断标志被设置,不清除中断标志。
4.线程等待(join)
方法 | 说明 |
public void join() | 等待线程结束 (死等) |
public void join(long millis) | 等待线程结束,最多等 millis 毫秒 |
5.获取当前线程实例
public static Thread currentThread();(返回当前线程对象的引用)
public class ThreadDemo {
public static void main(String[] args) {
Thread thread = Thread.currentThread();
System.out.println(thread.getName());
}
}
6.线程休眠
public static void sleep(long millis);(休眠当前线程 millis 毫秒)
public class ThreadDemo {
public static void main(String[] args) throws InterruptedException {
Thread.sleep(3 * 1000);
}
}
线程的状态:
1.NEW创建了Thread对象,但是还没调用start(内核里还没创建对应PCB)
2.TERMINATED表示内核中的pcb已经执行完毕了,但是Thread对象还在
3.RUNNABLE可运行的(正在运行或者就绪)
4.阻塞(WAITING/TIMED_WAITING/BLOCKED),表示线程pcb正在阻塞队列中