zoukankan      html  css  js  c++  java
  • 用户线程&&守护线程

         守护线程是为用户线程服务的,当一个程序中的所有用户线程都执行完成之后程序就会结束运行,程序结束运行时不会管守护线程是否正在运行,由此我们可以看出守护线程在 Java 体系中权重是比较低的。当一个程序中的所有用户线程都结束之后,无论守护线程是否在工作都会跟随用户线程一起结束。守护线程从业务逻辑层面来看权重比较低,但对于线程调度器来说无论是守护线程还是用户线程,在优先级相同的情况下被执行的概率都是相同的。守护线程的经典使用场景是垃圾回收线程,守护线程中创建的线程默认情况下也都是守护线程。

    (一)想要查看线程是否为守护线程只需通过调用 isDaemon() 方法查询即可,如果查询的值为 false 则表示不为守护线程,自然也就属于用户线程了。

    (二)果是线程,则可以通过设置 setDaemon(true) 方法将用户线程直接修改为守护线程,而如果是线程池则需要通过 ThreadFactory 将线程池中的每个线程都为守护线程才行。

    //创建固定个数的线程池

    ExecutorService threadPool = Executors.newFixedThreadPool(10, new ThreadFactory() {

    @Override

    public Thread newThread(Runnable r) {

    Thread t = new Thread(r);

    // 设置线程为守护线程

    t.setDaemon(true);

    return t; }

    });

    1. 守护线程的设置 setDaemon(true) 必须要放在线程的 start() 之前,否则程序会报错。
    2. 在守护线程中创建的所有子线程都是守护线程。
    3. 使用 jojn() 方法会等待一个线程执行完,无论此线程是用户线程还是守护线程。
    4. 即使是守护线程,当程序中调用 join() 方法时,程序依然会等待守护线程执行完成之后再结束进程。

    public static void main(String[] args) throws InterruptedException {

    Thread thread = new Thread(new Runnable() {

    @Override

    public void run() {

    for (int i = 1; i <= 10; i++) {

    // 打印 i 信息

    System.out.println("i:" + i);

    try {

    // 休眠 100 毫秒

    Thread.sleep(100);

    } catch (InterruptedException e) {

    e.printStackTrace(); } } } });

    // 设置为守护线程

    thread.setDaemon(true);

    // 启动线程

    thread.start();

    // 等待线程执行完

    thread.join();

    System.out.println("子线程==守护线程:" + thread.isDaemon());

    System.out.println("主线程==守护线程:" + Thread.currentThread().isDaemon()); }

  • 相关阅读:
    executable binary cannot run on android marshmallow (android 6.0)
    Android std and stl support
    Android std and stl support
    (OK) static linked & dynamically linked
    (OK)(OK) cross compile quagga-0.99.21mr2.2 for android-x86 in Fedora23
    linux和STL 常用头文件及说明
    Firefox 新增容器标签:可同时登录多个用户
    Android —— API Level
    Android added new permission model for Android 6.0 (Marshmallow).
    (OK) Android adb连接VirtualBox方式
  • 原文地址:https://www.cnblogs.com/KL2016/p/14734210.html
Copyright © 2011-2022 走看看