10 线程状态 线程状态观测 概念 代码:观察测试线程的状态 线程优先级 代码:测试线程的优先级 守护(daemon)线程 代码:测试守护线程

线程状态观测

概念
  • Thread.State

    • 线程状态。线程可以处于以下状态之一:

      • NEW
        尚未启动的线程处于此状态。
      • RUNNABLE
        在Java虚拟机中执行的线程处于此状态。
      • BLOCKED
        被阻塞等待监视器锁定的线程处于此状态。
      • WAITING
        正在等待另一个线程执行特定动作的线程处于此状态。
      • TIMED_WAITING
        正在等待另一个线程执行动作达到指定等待时间的线程处于此状态。
      • TERMINATED
        已退出的线程处于此状态。

      一个线程可以在给定时间点处于一个状态。 这些状态是不反映任何操作系统线程状态的虚拟机状态。

代码:观察测试线程的状态
public class TestState{
    public static void main(String[] args){
        Thread thread = new Thread(()->{
            for(int i =0;i<5;i++){
                try{
                    Thread.sleep(1000);
                }catch(InterruptedException e){
                    e.pinrtStackTrace();
                }
            }
           System.out.println("/") 
        });
        
        
        
        // 观察状态
        Thread.State state = thread.getState();
        System.out.println(state);	//NEW
        
        // 观察启动后
        thread.start();
        state = thread.getState();
        System.out.println(state);	// RUN
        
        
        while(state != Thread.State.TERMINATED){
            
            Thread.sleep(100);
        	state = thread.getState();// 更新线程状态
        	System.out.println(state);	// 输出状态
            
        }
        
    }
}

线程优先级

概念
  • Java提供一个线程调度器来监控程序中启动进入就绪状态的所有线程,线程调度器安装优先级决定应该调度哪个线程来执行。
  • 线程的优先级用数字表示,范围从1~10
    • Thread.MIN_PRIORITY = 1;
    • Thread.MAX_PRIORITY= 10;
    • Thread.NORM_PRIORITY = 5;
  • 使用一下方式改变或获取优先级
    • getPriority().setPriority(int x);

优先级低只是意味着获得调度的概率低,并不是优先级低就不会被调用了,这都是看CPU的调度

代码:测试线程的优先级
public class TestPriority{
    public static void main(String[] args){
        // 主线程默认优先级
     	System.out.println(Thread.currentThread().getName+"-->"+Thread.currentThread().getPriority());   
        
        MyPriority myPriority = new MyPriority();
        
        Thread t1 = new Thread(myPriority);
        Thread t2 = new Thread(myPriority);
        Thread t3 = new Thread(myPriority);
        Thread t4 = new Thread(myPriority);
        Thread t5 = new Thread(myPriority);
        Thread t6 = new Thread(myPriority);
        Thread t7 = new Thread(myPriority);
        
        
        // 先设置优先级,再启动
        t1.start();
        
        t2.setPriority(1);
        t2.start();
        
        t3.setPriority(4);
        t3.start();
        
        t4.setPriority(Thread.MAX_PRIORITY);
        t4.start();
        
        t5.start();
        t6.start();
        t7.start();
        
    }
}

class MyPriority implements Runnable{
    @Override
    public void run(){
     	System.out.println(Thread.currentThread().getName+"-->"+Thread.currentThread().getPriority());   
    }
}

守护(daemon)线程

概念
  • 线程分为用户线程守护线程
  • 虚拟机必须确保用户线程执行完毕
  • 虚拟机不用等待守护线程执行完毕
  • 如:后台操作记录日志,监控内存,垃圾回收等待…
代码:测试守护线程
public class TestDaemon{
    public static void main(String[] args){
        God god = new God();
        You you = new You();
        
        Thread t1 = new Thread(god);
        Thread t2 = new Thread(you);

        // 默认是false表示是用户线程,正常的线程都是用户线程...
        t1.setDaemon(true);
        
        
        
        t1.start();// 上帝守护线程启动
        t2.start();// 你用户线程启动
    }
}

// 上帝
class God implements Runnable{
    @Override
    public void run(){
        while(true){
            System.out.println("上帝保佑你");
        }
    }
    
}

// 你
class You implements Runnable(){
    @Override
    public void run(){
        for(int i =0;i<36500;i++){
            System.out.println("你一生都开心活着");
        }
            System.out.println("goodbye!world");
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千寻简

感谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值