1. 获取、设置线程信息的方法
方法 | 说明 |
---|
static Thread currentThread() | 静态方法直接通过Thread调用;获取当前线程,哪个线程执行该代码就获取那个线程Thread.currentThread() |
static void sleep(long millis) | 静态方法,让当前线程休眠一定的毫秒数 Thread.sleep() |
static void yield(); | 静态方法,线程礼让放弃当前CUP的执行权 Thread.yield(); |
long getId() | 获取线程ID |
String getName() | 获取线程名 |
void setName(String name) | 设置线程名,通常用于设置线程的作用,方便管理 |
ThreadGroup getThreadGroup() | 获取线程所属的线程组 |
State getState() | 获取线程状态(生命周期阶段),State是个枚举类型 |
int getPriority() | 获取线程优先级 |
void setPriority(int newPriority) | 设置线程优先级 |
boolean isAlive() | 判断线程是否处于活动状态,活动状态:线程已启动但尚未终止 |
void setDaemon(boolean on) | 将线程设置为守护线程,守护线程是为其他线程提供服务的线程(垃圾回收),只有非守护都结束时,JVM才会退出。 |
void join() | 无期限加入,让其他线程加入到我的队伍,跟在我后面,只有我执行完后才到后面的线程执行 |
void join(long millis) | 有期限加入,其他线程只跟随我xx毫秒,过后其他线程并不会阻塞,而是各自执行 |
| |
2. 如何安全的中断线程?
方法 | 说明 |
---|
void stop() | 废弃方法,暴力终止线程,假如将正在执行数据写入的线程强行中止,就会造成数据不一致问题。 |
void interrupt() | 给线程发送一个通知,告诉线程有人希望你退出了,此时线程并不会立即退出,需要我们自行检查中断状态进行相应处理 |
boolean isInterrupted() | 判断当前线程是否被中断 |
static boolean interrupted() | 静态方法,判断是否被中断,并清除当前中断状态 |
class StopThread extends Thread{
private boolean isStop = false;
private int count;
public void setStop(boolean stop) {
isStop = stop;
}
@Override
public void run() {
while (!isStop) {
System.out.println( count+=1 );
}
System.out.println("检测到标志位被修改,进行中断");
}
}
- 使用isInterrupted(),和interrupt()判断是否中断当前线程
class InterruptedThread extends Thread {
private int count;
@Override
public void run() {
while (!isInterrupted()) {
System.out.println(count+=1);
}
System.out.println("收到中断信号程序中断");
}
}
3. 线程的生命周期
- 线程的六种状态 使用
getState()
方法获取线程状态
public enum State {
NEW,
RUNNABLE,
BLOCKED,
WAITING,
TIMED_WAITING,
TERMINATED;
}
- 六种状态的转换关系图
