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();
}
@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.");
}
}
结果如下图所示:
----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.");
}
}
结果如下图所示:
两个区别在于
- JVM会在所有的非守护线程(用户线程)执行完毕后退出;
- main线程是用户线程;
- 仅有main线程一个用户线程执行完毕,不能决定JVM是否退出,也即是说main线程并不一定是最后一个退出的线程。
C++/Java线程之分的更多相关文章
- Java线程之 InterruptedException 异常
Java线程之 InterruptedException 异常 当一个方法后面声明可能会抛出InterruptedException 异常时,说明该方法是可能会花一点时间,但是可以取消的方法. 抛 ...
- Java线程之synchronized
翻译:https://www.journaldev.com/1061/thread-safety-in-java 我们知道线程安全在Java中是一个非常重要的主题,当多个线程操作共享数据时,如果没有任 ...
- Java线程之wait()、notify()、notifyAll()
翻译:https://www.journaldev.com/1037/java-thread-wait-notify-and-notifyall-example 简述 java中Objct对象包含三个 ...
- Java线程之Phaser
Phaser是一个灵活的线程同步工具,他包含了CyclicBarrier和CountDownLatch的相关功能 首先,来看一下如何用Phaser替代CountDownLatch.对于CountDow ...
- java 线程之executors线程池
一.线程池的作用 平时的业务中,如果要使用多线程,那么我们会在业务开始前创建线程,业务结束后,销毁线程.但是对于业务来说,线程的创建和销毁是与业务本身无关的,只关心线程所执行的任务.因此希望把尽可能多 ...
- java 线程之concurrent中的常用工具 CyclicBarrier
一.CyclicBarrier CyclicBarrier是一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point).在涉及一组固定大小的线程的程序 ...
- Java线程之CompletionService批处理任务
如果你向Executor提交了一个批处理任务,并且希望在它们完成后获得结果,怎么办呢? 为此你可以保存与每个任务相关联的Future,然后不断地调用 timeout为零的get,来检验Future是否 ...
- Java线程之Synchronized用法
synchronized是Java中的关键字,是一种同步锁.它修饰的对象有以下几种: 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对 ...
- Java线程之Java内存模型(jmm)
一.Java内存模型(jmm) 线程通信 消息传递 重排序 顺序一致性 Happens-Before As-If-Serial
随机推荐
- [cloud][sdn] LBaaS/neutron / Octavia
清晰/浅显: http://www.cnblogs.com/sammyliu/p/4656176.html IBM:写的一般般,价值不大 https://www.ibm.com/developerwo ...
- [httpd] httpd directory list character encoding
在httpd下放置文件用来直接从浏览器访问的时候,中文文件名有可能产生乱码. 做以下设置,调整字符编码: 1: Add this to your .htaccess: IndexOptions +Ch ...
- c++中new的三种用法详细解析
转载至: http://www.jb51.net/article/41524.htm 以下的是对c++中new的三种使用方法进行了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助. 一. ...
- Python操作Mysql数据库进阶篇——查询操作详解(一)
前面我们已经介绍了在Python3.x中如何连接一个Mysql数据库,以及怎么样对这个数据库创建一个表,增删改查表里的数据.想必大家对Mysql数据库和简单的sql语句有了一定的了解,其实sql语句博 ...
- LoadRunner录制脚本-基础
1.启动LoadRunner.没有脚本则创建脚本,有脚本则可以运行压力测试 2.点击Create/Edit Scripts,如下图,可新建或打开已有脚本 3.选择要测系统的协议 4.生成脚本分四步 5 ...
- IDEA指定启动JDK版本
使用场景: 开发人员在自己的机器上可能装了多个版本的JDK,但是在环境变量中只能配置一个 JAVA_HOME ,so你的IDEA Eclipse 可能因为你在 JAVA_HOME 配置JDK1.8 以 ...
- shell脚本中sqlite3命令查询数据库失败返回空,并将错误信息打印到标准错误输出
shell脚本中sqlite3命令查询数据库失败返回空,并将错误信息打印到标准错误输出 如: #/bin/sh local ret='sqlite3 test.db "select test ...
- TZOJ 3198: 区间和
描述 给定n个数据,有两个操作,加减其中的一个数据,当然还可查询在某段数据的和. 输入 输入数据有多组,每组数据的第一行输入n,1=<n<=500000,代表数据的个数.第二行输入具体数据 ...
- es分词器
1.默认的分词器 standard standard tokenizer:以单词边界进行切分standard token filter:什么都不做lowercase token filter:将所有字 ...
- 用laravel dingo/api创建产品api
沿着上一篇来讲,我们来创建一个简单的item产品api,也是用到laravel dingo/api来实现,对dingo/api不熟的朋友可以翻看前面的文章.好,我们随着ytkah一起来创建产品api ...