守护线程与yield

public final void setDaemon(boolean on)

将此线程标记为daemon线程或用户线程。 当运行的唯一线程都是守护进程线程时,Java虚拟机将退出。

public final boolean isDaemon()

测试这个线程是否是守护线程。

public static void yield()

暂停当前正在执行的线程对象,并执行其他线程。(了解)


package com.vince;

import javax.sound.midi.Soundbank;

/**
 * Created by vince on 2017/6/2.
 */
public class ThreadDemo3 {

    public static void main(String[] args){
        MyRunnable4 mr4 = new MyRunnable4();
        Thread t = new Thread(mr4);
        t.setName("Thread-t");
        //优先级高可以提高该线程抢点CPU时间片的概率大
        t.setPriority(Thread.MAX_PRIORITY);
        //线程可以分成守护线程和 用户线程,当进程中没有用户线程时,JVM会退出
        t.setDaemon(true);//把线程设置为守护线程
        System.out.println(t.isAlive());
        t.start();
        System.out.println(t.isAlive());

        for (int i = 0; i < 50; i++) {
            System.out.println("main--"+i);
            try {
                Thread.sleep(200);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            if (i==5){
                Thread.yield();//让出本次CPU执行时间片
            }
        }


    }
}


class MyRunnable4 implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i < 50; i++) {
            System.out.println("--"+i);
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}


第一步 简单测试下 将t线程设置为守护线程
让main执行的快一点 当main执行完后 t还会不会继续执行

注意在启动线程之前调用

Java基础之03 守护线程与yield 与其他方法 153
Java基础之03 守护线程与yield 与其他方法 153
结果 不会执行 因为用户线程执行完了 只剩守护线程时 会退出JVM
//线程可以分成守护线程和 用户线程,当进程中没有用户线程时,JVM会退出
Java基础之03 守护线程与yield 与其他方法 153

用处 当你使用一个程序要退出时 主线程执行完毕 有一些工作 比如统计后台数据(当然是不需要保存的无关紧要的数据)什么的这些线程就可以设置为守护线程
主线程执行完毕 这些工作就没必要继续执行了


yield

public static void yield()

暂停当前正在执行的线程对象,并执行其他线程。(了解)

Thread.yield();//让出本次CPU执行时间片 只让一次
Java基础之03 守护线程与yield 与其他方法 153
了解一下 用的比较少


6、其它方法与优先级

long getId() 返回该线程的标识符。

String getName() 返回该线程的名称。

void setName(String name) 改变线程名称,使之与参数 name 相同。

boolean isAlive() 测试线程是否处于活动状态。
Java基础之03 守护线程与yield 与其他方法 153
Java基础之03 守护线程与yield 与其他方法 153
void setPriority(int newPriority) 更改线程的优先级。

  //优先级高可以提高该线程抢点CPU时间片的概率大 只是可能 在start之前注意
    t.setPriority(Thread.MAX_PRIORITY);

static int MAX_PRIORITY 线程可以具有的最高优先级。

static int MIN_PRIORITY 线程可以具有的最低优先级。

static int NORM_PRIORITY 分配给线程的默认优先级。

相关文章:

  • 2021-07-16
  • 2021-10-10
  • 2021-08-18
  • 2021-11-13
  • 2022-12-23
  • 2022-02-01
  • 2021-08-08
猜你喜欢
  • 2021-10-14
  • 2022-12-23
  • 2021-12-26
  • 2021-07-05
  • 2021-07-10
相关资源
相似解决方案