3-Java多线程编程Thread相关知识点

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()静态方法,判断是否被中断,并清除当前中断状态
  • 自定义标志位isStop判断是否中断当前线程
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 状态表示刚刚new创建的线程
         */
        NEW,
        /**
         * runniable 调用start方法后进入runniable状态
         */
        RUNNABLE,
        /**
         *bloked 当线程在执行过程中遇到了synchronized同步块进入bloked阻塞状态
         */
        BLOCKED,
        /**
         * waiting 表示进入无时间限制的等待状态
         */
        WAITING,
        /**
         * time_waiting 表示进入有时间限制的等待状态
         */
        TIMED_WAITING,
        /**
         * terminate 线程执行完毕,进入结束状态
         */
        TERMINATED;
}
  • 六种状态的转换关系图
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值