java thread detach_C++/Java线程之分

JAVA线程状态图

4543de2d8773227035659eafff1b7e2e.png

1.C++/windows中主线程结束,其他线程必然死亡(即使调用pthread_detach解除父子关系,主线程消亡时也会导致子线程被迫关闭)。

----1.1 一个进程中可以有很多的线程,可以在主线程上创建一个新线程(A),而在这个新线程(A)中可以再创建别的线程。这样的话,线程之间就可以层层嵌套;

CreateTread()函数中就有一个参数可以指定创建线程的入口(就是可以自定义一个线程启动入口),

----1.2 当父线程消亡的时候,子线程是不会消亡的,是会继续执行到结束的;

----1.3 当主线程消亡的时候,所有线程都得死。

2.Java中线程分为守护线程(如垃圾回收线程)和非守护线程(默认为非守护线程/用户线程),通过              setDaemon(true)方法将非守护线程变为守护线程;

----2.1默认情况下主线程结束,子线程未结束时,程序不结束;

package base;

class ThreadTest extends Thread {

ThreadTest() {

super("Demo Thread");

System.out.println("Child thread: " + this);

start();

}

@Override

public void run() {

try {

for (int i = 5; i > 0; i--) {

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

Thread.sleep(50);

}

} catch (InterruptedException e) {

System.out.println("Child Interrupted.");

}

System.out.println("Exiting child thread.");

}

}

//NOTE:主线程退出之后子线程仍然可以继续运行

//NOTE:非守护线程

public class NewThread {

public static void main(String[] args) {

new ThreadTest();

System.out.println("Main thread exiting.");

}

}

结果如下图所示:

00b5c9a39a9f697d5aeeffc700dcbd58.png

----2.2当子线程为守护线程时,主线程结束则其他子线程也结束,程序结束;

class ThreadTest extends Thread {

ThreadTest() {

super("Demo Thread");

System.out.println("Child thread: " + this);

//将子线程t设置为守护线程

setDaemon(true);

start();

}

@Override

public void run() {

try {

for (int i = 5; i > 0; i--) {

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

Thread.sleep(50);

}

} catch (InterruptedException e) {

System.out.println("Child Interrupted.");

}

System.out.println("Exiting child thread.");

}

}

//NOTE:主线程退出之后子线程仍然可以继续运行

//NOTE:非守护线程

public class NewThread {

public static void main(String[] args) {

new ThreadTest();

System.out.println("Main thread exiting.");

}

}

结果如下图所示:

dfed351a9dc17d1a69251346d75ffc31.png

两个区别在于

9028423998dbf75286f38bba3ad3e398.png

JVM会在所有的非守护线程(用户线程)执行完毕后退出;

main线程是用户线程;

仅有main线程一个用户线程执行完毕,不能决定JVM是否退出,也即是说main线程并不一定是最后一个退出的线程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值