线程的优先级和守护线程

线程的优先级和守护线程

线程优先级

  1. 关于线程的优先级问题,线程的优先级分为1-10,优先级越高,数量越大,当然了,java默认的优先级是5.

  2. 我们可以通过getPriority()方法去得到它的默认值,我们还可以通过setPriority()方法去改变它的默认值.

  3. 如果线程的优先级小于1或者大于10,则jdk报illegalArgumentException()异常.

package com.xxgc.state;

//测试线程的优先级
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);

       //先设置优先级,再启动
       t1.start();  //默认优先级为5

       t2.setPriority(6);
       t2.start();

       t3.setPriority(4);
       t3.start();

       t4.setPriority(Thread.MAX_PRIORITY); //MAX_PRIORITY=10
       t4.start();

       t5.setPriority(Thread.MIN_PRIORITY); //MIN_PRIORITY=1
       t5.start();

       t6.setPriority(8);
       t6.start();

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

守护线程

1、定义:

守护线程,也可称为服务线程,当程序中没有可服务的线程时会自动离开。因此,守护线程的优先级比较低,用于为其他的线程等提供服务

java中最典型的守护线程就是垃圾回收线程。当我们的应中用没有任何常规线程运行时,就不会产生垃圾了,垃圾回收线程就无服务对象了,就会自动离开。它始终在低级别的状态中运行,用于实时监控和管理系统中的可回收资源。

2、生命周期:

守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。也就是说守护线程不依赖于终端,但是依赖于系统,与系统“同生共死”。那Java的守护线程是什么样子的呢。当JVM中所有的线程都是守护线程的时候,JVM就可以退出了;如果还有一个或以上的非守护线程则JVM不会退出。

虚拟机必须确保用户线程执行完毕

虚拟机不用等待守护线程执行完毕

 

上帝守护例题

package com.xxgc.state;

//测试守护线程
//上帝守护你典例
public class TestDaemon {
   public static void main(String[] args) {
       God god = new God();
       You you = new You();
       Thread thread = new Thread(god);
       thread.setDaemon(true);  //默认是false表示是用户线程,正常的线程都是用户线程...

       thread.start(); //上帝守护线程启动

       new Thread(you).start();  //你 用户线程启动...
  }
}

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

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

 

posted @ 2020-09-19 17:05  墨染念颖  阅读(297)  评论(0)    收藏  举报