C++/Java线程之分
JAVA线程状态图
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();}@Overridepublic 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.");}
}
结果如下图所示:
----2.2当子线程为守护线程时,主线程结束则其他子线程也结束,程序结束;
class ThreadTest extends Thread {ThreadTest() {super("Demo Thread");System.out.println("Child thread: " + this);//将子线程t设置为守护线程setDaemon(true); start();}@Overridepublic 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.");}
}
结果如下图所示:
两个区别在于
- JVM会在所有的非守护线程(用户线程)执行完毕后退出;
- main线程是用户线程;
- 仅有main线程一个用户线程执行完毕,不能决定JVM是否退出,也即是说main线程并不一定是最后一个退出的线程。
转载于:https://www.cnblogs.com/jadeshu/p/10663606.html
C++/Java线程之分相关推荐
- java线程之InheritableThreadLocal
ThreadLocal和InheritableThreadLocal区别,可以用代码测试一下: [java] view plain copy package com.lang; import juni ...
- Java线程之Synchronized用法
synchronized是Java中的关键字,是一种同步锁.它修饰的对象有以下几种: 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对 ...
- (JAVA)线程之lock和死锁(例)
package thread; import java.util.concurrent.locks.*;/*** @author Alina* @date 2021年12月20日 11:07 下午* ...
- Java线程之CompletionService批处理任务
如果你向Executor提交了一个批处理任务,并且希望在它们完成后获得结果,怎么办呢? 为此你可以保存与每个任务相关联的Future,然后不断地调用 timeout为零的get,来检验Future是否 ...
- Java线程之CompletionService
当使用ExecutorService启动了多个Callable后,每个Callable会产生一个Future,我们需要将多个Future存入一个线性表,用于之后处理数据.当然,还有更复杂的情况,有5个 ...
- Java线程之setDaemon(true)方法的作用
一.线程 JAVA线程分为即实线程与守护线程,守护线程是优先级低,存活与否不影响JVM的退出的线程,实现守护线程的方法是在线程start()之前setDaemon(true),否则会抛出一个Illeg ...
- java线程之List集合并发安全问题及解决方案
一.问题代码 任务:执行10轮次,使用多线程,给list集合添加元素,查看每次执行的结果. public static void main(String[] args) throws Interrup ...
- JAVA线程之Thread类详解
Thread类用于操作线程,是所以涉及到线程操作(如并发)的基础.本文将通过源码对Thread类的功能作用进行分析. 一.属性 /* Make sure registerNatives is the ...
- Java线程之join
简述 Thread类的join方法用来使main线程进入阻塞状态,进而等待调用join方法的线程执行,join有三个重载方法: public final void join() 使主线程进入阻塞状态, ...
最新文章
- Oracle计算时间差表达式
- InetAddress类和InetSocketAddress的使用
- linux c 获取 进程 线程 id
- 在html中取消或加上超链接的下划线
- Linux与Windows比较出的20个优势
- 笔记本电脑排名2015_2015-2026全球及中国AC-DC电源适配器市场发展现状调研及未来前景行业展望...
- 从零开始用好 Maven : 从 Hello World 到日常使用
- jQuery.fn.extend 与 jQuery.extend 用法
- Mac OS X 系统修改Terminal终端配色
- JAVA interface报错:abstract methods do not specify a body
- 福州大学计算机科学与技术 何x玲,吴伶 - 福州大学 - 数学与计算机科学学院
- 怎么给计算机管理设置密码,如何给电脑设置密码
- 雅诗兰黛公司宣布Michelle Freyre将被任命为倩碧高级副总裁、全球总经理
- 邮箱发信量到达上限,发不出邮件,你知道该怎么办吗?
- 【三年前端开发的思考】如何有效地阅读需求?
- ChatGPT 是传统搜索引擎的终结?——Web3 创新 | Is ChatGPT The End Of Traditional Search Engines—Web3 Innovation
- 32、Java——迷你图书管理器(对象+JDBC)
- RK3288 编译不过遇到的问题
- 企业如何与客户建立良好的客户关系
- 阿里百秀移动端首页案例
热门文章
- C# 或Asp.Net 将excel表格导入数据库
- 深入浅出VC++串口编程--短信应用开发
- python画图代码的输入数据可以取出来_用Python写了个小程序:最小二乘法、读取文件、作图以及数据输出到文件...
- Python中的中文编码声明注释
- Markdown--Latex数学公式编辑
- CentOs基础操作指令(用户管理、组管理)
- 什么样的产品可以成功?
- Qt 中获取三种坐标类型
- 复旦计算机转专业面试问题,转专业最容易的6所985大学,清华大学第4,复旦大学第3,这所第一...
- access 动态 top 条件_2020年10月抖音直播营销报告_行业动态