线程方法

SOBER大约 2 分钟

线程方法

常用方法第一组

  1. setName 设置线程名称,使之与参数 name 相同
  2. getName 返回该线程的名称
  3. start 使该线程开始执行;Java 虚拟机底层调用该线程的 start0 方法
  4. run 调用线程对象 run 方法,
  5. setPriority 更改线程的优先级
  6. getPriority 获取线程的优先级
  7. sleep 在指定的毫秒数内让当前正在执行的线程休眠(暂停执行)
  8. interrupt 中断线程

注意事项和细节

  1. start 底层会创建新的线程,调用run,run 就是一个简单的方法调用,不会启动新线程
  2. 线程优先级的范围
  3. interrupt,中断线程,但并没有真正的结束线程。所以一般用于中断正在休眠线程
  4. sleep:线程的静态方法,使当前线程休眠

常用方法第二组

  1. yield:线程的礼让。让出 cpu,让其他线程执行,但礼让的时间不确定,所以也不一定礼让成功
  2. join:线程的插队。插队的线程一旦插队成功,则肯定先执行完插入的线程所有的任务
  3. 案例:创建一个子线程 ,每隔 1s 输出 hello, 输出 20次,主线程每隔1秒,输出 hi,输出 20次
  4. 要求: 两个线程同时执行,当主线程输出 5次后,就让子线程运行完毕,主线程再继续

用户线程 和 守护线程

  1. 用户线程: 也叫工作线程,当线程的任务执行完或通知方式结束
  2. 守护线程: 一般是为工作线程服务的,当所有的用户线程结束,守护线程自动结束
  3. 常见的守护线程: 垃圾回收机制

将一个线程设置成守护线程

package commonThread;

public class Thread05 {
    public static void main(String[] args) throws InterruptedException {
        MyDaemonThread myDaemonThread = new MyDaemonThread();
        /**
         * 如果我们希望当 main 线程结束后,子线程自动结束
         * 只需将子线程设为守护线程即可
         * 注意:先设置为守护线程,在启动该线程
         */
        myDaemonThread.setDaemon(true);
        myDaemonThread.start();
        for (int i = 0; i <= 10; i++){
            System.out.println("我是主线程,当我结束时,守护的子线程也结束,,,,," + i);
            Thread.sleep(1000);
        }
    }
}

class MyDaemonThread extends Thread{
    @Override
    public void run(){
        for (;;){ // 无线循环
            try {
                System.out.println("我是被守护的子线程。。。。。");
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }
    }
}