zoukankan      html  css  js  c++  java
  • java后台进程和线程优先级


     1. 后台线程:处于后台运行,任务是为其他线程提供服务。也称为“守护线程”或“精灵线程”。JVM的垃圾回收就是典型的后台线程。
    特点:若所有的前台线程都死亡,后台线程自动死亡。
    设置后台线程:Thread对象setDaemon(true);
    setDaemon(true)必须在start()调用前。否则出现IllegalThreadStateException异常;
    前台线程创建的线程默认是前台线程;
    判断是否是后台线程:使用Thread对象的isDaemon()方法;

    并且当且仅当创建线程是后台线程时,新线程才是后台线程。

    例子:



    class Daemon  implements Runnable{


    public void run() {
    for (int i = 0; i < 200; i++) {
    System.out.println("Daemon -->" + i);
    }
    }

    }


    public class DaemonDemo {
    public static void main(String[] args) {
    /*Thread cThread = Thread.currentThread();
    System.out.println(cThread.isAlive());

    //cThread.setDaemon(true);
    System.out.println(cThread.isDaemon());*/

    Thread t = new Thread(new Daemon());

    System.out.println(t.isDaemon());
    for (int i = 0; i < 10; i++) {

    System.out.println("main--" + i);
    if(i == 5){
    t.setDaemon(true);
    t.start();
    }
    }
    }
    }



    2,线程的优先级:

    每个线程都有优先级,优先级的高低只和线程获得执行机会的次数多少有关。
    并非线程优先级越高的就一定先执行,哪个线程的先运行取决于CPU的调度;
    默认情况下main线程具有普通的优先级,而它创建的线程也具有普通优先级。
    Thread对象的setPriority(int x)和getPriority()来设置和获得优先级。
    MAX_PRIORITY :值是10
    MIN_PRIORITY :值是1
    NORM_PRIORITY :值是5(主方法默认优先级)


    注意:每个线程默认的优先级都与创建他的父线程的优先级相同,在在默认的情况下,

    main线程具有普通优先级,由main线程创建的子线程也具有普通优先级


    例子:



    class Priority implements Runnable{


    public void run() {

    for (int i = 0; i < 200; i++) {
    System.out.println("Priority-- " + i);
    }
    }

    }

    public class PriorityDemo {
    public static void main(String[] args) {

    /**
    * 线程的优先级在[1,10]之间
    */
    Thread.currentThread().setPriority(3);
    System.out.println("main= " + Thread.currentThread().getPriority());
    /*
    *  public final static int MIN_PRIORITY = 1;
    *  public final static int NORM_PRIORITY = 5;
    *  public final static int MAX_PRIORITY = 10;
    * */
    System.out.println(Thread.MAX_PRIORITY);

    //===============================================

    Thread t = new Thread(new Priority());
    for (int i = 0; i < 200; i++) {
    System.out.println("main" + i);
    if(i == 50){
    t.start();
    t.setPriority(10);
    }
    System.out.println("-------------------------"+t.getPriority());
    }
    }
    }

  • 相关阅读:
    WPF Caliburn 学习笔记(五)HelloCaliburn
    MSDN 教程短片 WPF 20(绑定3ObjectDataProvider)
    MSDN 教程短片 WPF 23(3D动画)
    比赛总结一
    HDU3686 Traffic Real Time Query System
    HDU3954 Level up
    EOJ382 Match Maker
    UESTC1565 Smart Typist
    HDU3578 Greedy Tino
    ZOJ1975 The Sierpinski Fractal
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3424262.html
Copyright © 2011-2022 走看看