java-守护线程

守护线程:也可以理解为后台线程,之前创建的都是前台线程。
只要线程调用了setDaemon(true);就可以把线程标记为守护线程。
前台后台线程运行时都是一样的,获取CPU的执行权执行。
只有结束的时候有些不同。
前台线程要通过run方法结束,线程结束。
后台线程也可以通过run方法结束,线程结束,还有另一种情况,
当进程中所有的前台线程都结束了,这时无论后台线程处于什么样的状态,都会结束,从而进程会结束。
进程结束依赖的都是前台线程。

//演示停止线程。
class Demo implements Runnable {
    private boolean flag = true;
    public synchronized void run() {//不要这么干将synchronized加到run方法这已经变成了单线程了这里是故意这么做为了测试wait()  

        while(flag) {
            try    {
                wait();//t1  t2   //如果使用notify()必须和wait()在同一个锁里,那如果不在同一个锁怎么办只能用interrupt()
            }
            catch (InterruptedException e) {
                System.out.println(Thread.currentThread().toString()+"....."+e.toString());
                changeFlag();
            }

            System.out.println(Thread.currentThread().getName()+"----->");
        }
    }
    //对标记的修改方法。
    public void changeFlag() {
        flag = false;
    }
}

class MStopThreadDemo2 {
    public static void main(String[] args) {
        Demo d = new Demo();

        Thread t1 = new Thread(d);
        Thread t2 = new Thread(d);
        t1.start();
        //将t2标记为后台线程,守护线程。
        t2.setDaemon(true); //将t2标记为后台线程只要t1线程结束不管t2线程处于什么状态,整个进程都会结束
        t2.start();

        int x = 0;
        while(true){
            if(++x == 50){
                //d.changeFlag();//改变线程任务代码的标记,让其他线程也结束。
                //对t1线程对象进行中断状态的清除,强制让其恢复到运行状态。
                t1.interrupt();
                //对t2线程对象进行中断状态的清除,强制让其恢复到运行状态。
                //t2.interrupt();//将这个注释掉将t2改成后台进程,那么只要前台进程结束,不管后台进程处于什么状态整个进程就结束了

                break;//跳出循环,主线程可以结束。
            }
            System.out.println("main-------->"+x);
        }

        System.out.println("over");
    }
}
时间: 2024-10-12 18:25:27

java-守护线程的相关文章

java 守护线程整理

java中finally语句不走的可能存在system.exit(0)与守护线程 线程sleep采用TimeUnit类 设定线程的名字thread.getcurrentThread().setName() 设定守护线程thread.getcurrentThread().setDaemon(true) http://www.cnblogs.com/diyingyun/archive/2011/12/04/2275268.html 守护线程在没有用户线程可服务时自动离开,在 Java中比较特殊的线程

Java 守护线程(Daemon) 例子

Java  守护线程(Daemon) 示例 本文由 TonySpark 翻译自 Javarevisited.转载请参见文章末尾的要求. 当我们在Java中创建一个线程,缺省状态下它是一个User线程,如果该线程运行,JVM不会终结该程序.当一个线被标记为守护线程,JVM不会等待其结束,只要所有用户(User)线程都结束,JVM将终结程序及相关联的守护线程. Java中可以用 Thread.setDaemon(true) 来创建一个守护线程.咱们看一个Java中有关守护线程的例子. 1 publi

JAVA守护线程与用户线程的区别

public class DaemonTest { public static void main(String[] args) { new WorkerThread().start(); try { Thread.sleep(7500); } catch (InterruptedException e) {} System.out.println("Main Thread ending") ; } } class WorkerThread extends Thread { publi

Java守护线程概述

Java的线程分为两种:User Thread(用户线程).DaemonThread(守护线程). 只要当前JVM实例中尚存任何一个非守护线程没有结束,守护线程就全部工作:只有当最后一个非守护线程结束是,守护线程随着JVM一同结束工作,Daemon作用是为其他线程提供便利服务,守护线程最典型的应用就是GC(垃圾回收器),他就是一个很称职的守护者. User和Daemon两者几乎没有区别,唯一的不同之处就在于虚拟机的离开:如果 User Thread已经全部退出运行了,只剩下Daemon Thre

JAVA - 守护线程(Daemon Thread)

转载自:http://www.cnblogs.com/luochengor/archive/2011/08/11/2134818.html 在Java中有两类线程:用户线程 (User Thread).守护线程 (Daemon Thread). 所谓守护 线程,是指在程序运行的时候在后台提供一种通用服务的线程,比如垃圾回收线程就是一个很称职的守护者,并且这种线程并不属于程序中不可或缺的部分.因此,当所有的非守护线程结束时,程序也就终止了,同时会杀死进程中的所有守护线程.反过来说,只要任何非守护线

白话JAVA守护线程

OneCoder(苦逼Coder)原创,转载请务必注明出处: http://www.coderli.com/archives/daemon-thread-plain-words/ 关于“白话”:偶然想到的词,也许有一天能成为一个系列.目的就是用简洁,明快的语言来告诉您,我所知道的一切. Java中的线程分两类,用户线程和守护线程. Thread commonThread = new Thread("Common Thread"); 这样就是用户线程. Thread daemonThre

转:JAVA守护线程

原文地址:https://www.cnblogs.com/wxgblogs/p/5417503.html 详细内容看原文~  ,写的挺好的 在Java中有两类线程:User Thread(用户线程).Daemon Thread(守护线程) .用个比较通俗的比如,任何一个守护线程都是整个JVM中所有非守护线程的保姆:只要当前JVM实例中尚存在任何一个非守护线程没有结束,守护线程就全部工作:只有当最后一个非守护线程结束时,守护线程随着JVM一同结束工作.Daemon的作用是为其他线程的运行提供便利服

从 JVM 视角看看 Java 守护线程

Java 多线程系列第 7 篇. 这篇我们来讲讲线程的另一个特性:守护线程 or 用户线程? 我们先来看看 Thread.setDaemon() 方法的注释,如下所示. Marks this thread as either a daemon thread or a user thread. The Java Virtual Machine exits when the only threads running are all daemon threads. This method must b

java守护线程

/** * 后台线程又叫做守护线程,通常是为了辅助其他线程而运行的线程,‘ * 后台线程不妨碍程序终止, * 一个程序中只要还有一个前台线程在执行,这个后台线程就不会终止. * 反之,如果所有前台线程都已经结束,无论是否还有后台线程在执行,这个进程都会结束. * 如果对某个线程对象在启动(调用start()方法)前调用setDeamon(true)方法,这个线程就会变成后台线程. * 创建一个无限循环后台线程,验证前台线程结束后,它也结束 */ package com.starain.threa

java守护线程的理解

package daemonThread; /*setDaemon(true)方法将线程设置为守护线程,线程的Daemon默认值为false * 只要当前JVM实例中存在任何一个非守护线程没有结束,守护线程就在工作 * 当进程中不存在非守护线程,则守护线程随着JVM一同结束 * GC(垃圾回收器)就是一个守护线程 * 本例中main线程虽然先结束,但是testThread线程还在工作,所以只有当testThread线程也结束,才停止打印i */ class MyThread extends Th