java中线程分两种,守护线程和用户线程。

java中线程分为两种类型:用户线程守护线程

通过Thread.setDaemon(false)设置为用户线程;

通过Thread.setDaemon(true)设置为守护线程。

如果不设置次属性,默认为用户线程。

区别:主线程结束后用户线程会继续运行,JVM存活;主线程结束后,如果没有用户线程,都是守护线程,则JVM结束。

public class Mytest extends Thread {
    public void run() {
        for(int i=0;;i++){
            try {
                Thread.sleep(1000);
            } catch (Exection ex) {   

            }
            System.out.println(i);

        }
    }

    public static void main(String [] args){
        Mytest test = new Mytest();
        test.setDaemon(true);
        test.start();
        System.out.println("isDaemon: " + test.isDaemon());
        try {
            // test.setDaemon(true); 接受输入,一旦接收到用户输入,main线程结束,守护线程自动结束,JVM结束。
            // test.setDaemon(false); 接受输入,一旦接收到用户输入,main线程结束,用户线程会继续,即死循环,JVM不会结束。
            System.in.read();
        } catch (IOException ex) {

        }
    }
}
时间: 2024-07-31 00:28:01

java中线程分两种,守护线程和用户线程。的相关文章

简述java中抛出异常的两种方式

java编程中经常遇到异常,这时就需要利用java中的异常抛出机制,在java中提供了两种抛出异常的方法:try{}  catch() {}和throw. 一.抛出异常的两种方式 (1) 首先我们来看一下try()  catch(){}这种方式: ? 1 2 3 4 5 6 try{    i=9\0; } catch(exception e) {     system.out.println("除数不能为0"): } 该种方式是将待执行的代码放入try中,如果执行的代码发生异常就会被

述java中抛出异常的两种方式

java编程中经常遇到异常,这时就需要利用java中的异常抛出机制,在java中提供了两种抛出异常的方法:try{}  catch() {}和throw. 一.抛出异常的两种方式 (1) 首先我们来看一下try()  catch(){}这种方式: ? 1 2 3 4 5 6 try{    i=9\0; } catch(exception e) {     system.out.println("除数不能为0"): } 该种方式是将待执行的代码放入try中,如果执行的代码发生异常就会被

java中super 的两种用法

通过用 static 来定义方法或成员,为我们编程提供了某种便利,从某种程度上可以说它类似于 C 语言中的全局函数和全局变量.但是,并不是说有了这种便利,你便可以随处使用,如果那样的话,你便需要认真考虑一下自己是否在用面向对象的思想编程,自己的程序是否是面向对象的. 好了,现在开始讨论 this&super 这两个关键字的意义和用法. 在 Java 中, this 通常指当前对象, super 则指父类的.当你想要引用当前对象的某种东西,比如当前对象的某个方法,或当前对象的某个成员,你便可以利用

Java中String的两种赋值方式的区别

本文修改于:https://www.zhihu.com/question/29884421/answer/113785601 前言:在java中,String有两种赋值方式,第一种是通过"字面量"赋值,如:String str="hello",第二种是通过new关键字创建新对象,如:String str=new String("hello").那么这两种赋值的方式到底有什么区别呢,下面给出具体分析. 1.首先回顾Java虚拟机的结构图. 在上面的

细说java中Map的两种迭代方式

以前对java中迭代方式总是迷迷糊糊的,今天总算弄懂了,特意的总结了一下,基本是算是理解透彻了. 1.再说Map之前先说下Iterator: Iterator主要用于遍历(即迭代访问)Collection集合中的元素,Iterator也称为迭代器.它仅仅只有三个方法:hasNext(),next()和remove() hasNext():如果仍有元素可以迭代,则返回 true.(换句话说,如果 next 返回了元素而不是 抛出异常,则返回 true). next():返回迭代的下一个元素. re

Java中栈的两种实现

栈是先进后出的数据结构,主要有弹栈,入栈两种操作. 数组版 1 package stack; 2 3 /*** 4 * 栈的数组实现--java 5 * 栈是先进后出的数据结构,主要有弹栈,入栈两种操作 6 * 由于该栈是由数组实现的,数组的长度是固定的,当栈空间不足时, 7 * 必须将原数组数据复制到一个更长的数组中, 8 * 考虑到入栈时或许需要进行数组复制,平均需要复制N/2个数据项, 9 * 故入栈的时间复杂度为O(N),出栈的时间复杂度依然为O(1) 10 * @author bink

Java中异常的两种处理方式

异常处理的两种方式: 声明抛出 throws  声明抛出的位置:是在方法声明的位置上使用throws关键字向上抛出异常. 捕捉 try....catch.. public class ExceptionTest03{     public static void main(String[] args){     //创建文件输入流读取文件     //思考:java编译器是如何知道以下的代码执行过程中可能出现异常,     //java编译器是如何知道这个异常发生的几率比较高呢?    //ja

java中super的两种用法

转自:http://blog.csdn.net/yihuei123/archive/2007/06/04/1637893.aspx 通过用static来定义方法或成员,为我们编程提供了某种便利,从某种程度上可以说它类似于C语言中的全局函数和全局变量.但是,并不是说有了这种便利,你便可以随处使用,如果那样的话,你便需要认真考虑一下自己是否在用面向对象的思想编程,自己的程序是否是面向对象的. 好了,现在开始讨论this&super这两个关键字的意义和用法. 在Java中,this通常指当前对象,su

java 中 return 的两种常见的用法

一:return语句总是用在方法中,有两个作用: 一个是返回方法指定类型的值(这个值总是确定的), 一个是结束方法的执行(仅仅一个return语句). 二:实例1 -- 返回一个String private String gets(){ String s = "qw789" ; return s ; } 实例2 -- 结束程序 private void gets(String s ){ if ( s == null ){ return ; } System.out.println( &