用户线程和守护线程

用户线程

用户线程执行完,jvm退出。守护线程还是可以跑的

/**
* A <i>thread</i> is a thread of execution in a program. The Java
* Virtual Machine allows an application to have multiple threads of
* execution running concurrently.
* <p>
* Every thread has a priority. Threads with higher priority are
* executed in preference to threads with lower priority. Each thread
* may or may not also be marked as a daemon. When code running in
* some thread creates a new <code>Thread</code> object, the new
* thread has its priority initially set equal to the priority of the
* creating thread, and is a daemon thread if and only if the
* creating thread is a daemon.
* <p>
* When a Java Virtual Machine starts up, there is usually a single
* non-daemon thread (which typically calls the method named
* <code>main</code> of some designated class). The Java Virtual
* Machine continues to execute threads until either of the following
* occurs:
* <ul>
* <li>The <code>exit</code> method of class <code>Runtime</code> has been
* called and the security manager has permitted the exit operation
* to take place.
* <li>All threads that are not daemon threads have died, either by
* returning from the call to the <code>run</code> method or by
* throwing an exception that propagates beyond the <code>run</code>
* method.
* </ul>
* /

用户线程优先权

例子

package com.java.javabase.thread.base;

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class PriorityTest {
private static int size =10;
public static void main(String[] args) {
Thread t1 =new ThreadOne("t1");
Thread t2 =new ThreadOne("t2");
t2.setPriority(1);
t1.start();
t2.start();
log.info("Thread {} prority is {}",Thread.currentThread().getName(),Thread.currentThread().getPriority()); }
static class ThreadOne extends Thread{
public ThreadOne(String name){
super(name);
} @Override
public void run(){
int i =0;
while(i<size){
log.info("Thread : {} priority is {} ,run {} times",Thread.currentThread().getName(),
Thread.currentThread().getPriority(),i++);
}
}
}
}

说明

setPriority是Thread方法,用户线程的优先级是1到10,默认是5。虽然设置了优先级,但线程的执行还是在于获取cpu的执行,看操作系统的支持,

不是你级别高,cpu就给你用的。

守护线程

package com.java.javabase.thread.base;

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class DaemonTest {
private static int size =10;
public static void main(String[] args) {
Thread t1 =new ThreadOne("t1");
Thread t2 =new ThreadTwo("t2");
t2.setDaemon(true);
t1.start();
t2.start();
log.info("Thread {} prority is {}",Thread.currentThread().getName(),Thread.currentThread().getPriority()); }
static class ThreadOne extends Thread{
public ThreadOne(String name){
super(name);
} @Override
public void run(){
int i =0;
while(i<size){
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
log.info("Thread : {} priority is {} ,run {} times",Thread.currentThread().getName(),
Thread.currentThread().getPriority(),i++);
}
}
}
static class ThreadTwo extends Thread{
public ThreadTwo(String name){
super(name);
} @Override
public void run(){
int i =0;
while(true&& i<(size*10000)){
try {
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
log.info("Thread : {} priority is {} ,run {} times",Thread.currentThread().getName(),
Thread.currentThread().getPriority(),i++);
}
}
}
}

测试结果

2019-07-30 20:49:51,963   [main] INFO  DaemonTest  - Thread main prority is 5
2019-07-30 20:49:51,970 [t1] INFO DaemonTest - Thread : t1 priority is 5 ,run 0 times
2019-07-30 20:49:51,980 [t1] INFO DaemonTest - Thread : t1 priority is 5 ,run 1 times
2019-07-30 20:49:51,980 [t2] INFO DaemonTest - Thread : t2 priority is 5 ,run 0 times
2019-07-30 20:49:51,991 [t1] INFO DaemonTest - Thread : t1 priority is 5 ,run 2 times
2019-07-30 20:49:52,001 [t2] INFO DaemonTest - Thread : t2 priority is 5 ,run 1 times
2019-07-30 20:49:52,002 [t1] INFO DaemonTest - Thread : t1 priority is 5 ,run 3 times
2019-07-30 20:49:52,013 [t1] INFO DaemonTest - Thread : t1 priority is 5 ,run 4 times
2019-07-30 20:49:52,021 [t2] INFO DaemonTest - Thread : t2 priority is 5 ,run 2 times
2019-07-30 20:49:52,023 [t1] INFO DaemonTest - Thread : t1 priority is 5 ,run 5 times
2019-07-30 20:49:52,034 [t1] INFO DaemonTest - Thread : t1 priority is 5 ,run 6 times
2019-07-30 20:49:52,042 [t2] INFO DaemonTest - Thread : t2 priority is 5 ,run 3 times
2019-07-30 20:49:52,045 [t1] INFO DaemonTest - Thread : t1 priority is 5 ,run 7 times
2019-07-30 20:49:52,056 [t1] INFO DaemonTest - Thread : t1 priority is 5 ,run 8 times
2019-07-30 20:49:52,062 [t2] INFO DaemonTest - Thread : t2 priority is 5 ,run 4 times
2019-07-30 20:49:52,066 [t1] INFO DaemonTest - Thread : t1 priority is 5 ,run 9 times

java并发:初探用户线程和守护线程的更多相关文章

  1. 转:【Java并发编程】之四:守护线程与线程阻塞的四种情况

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/17099981      守护线程   Java中有两类线程:User Thread(用户线 ...

  2. 【Java并发编程】之四:守护线程与线程阻塞的四种情况

    守护线程 Java中有两类线程:User Thread(用户线程).Daemon Thread(守护线程) ​ 用户线程即运行在前台的线程,而守护线程是运行在后台的线程. 守护线程作用是为其他前台线程 ...

  3. java高并发系列 - 第9天:用户线程和守护线程

    守护线程是一种特殊的线程,在后台默默地完成一些系统性的服务,比如垃圾回收线程.JIT线程都是守护线程.与之对应的是用户线程,用户线程可以理解为是系统的工作线程,它会完成这个程序需要完成的业务操作.如果 ...

  4. 额!Java中用户线程和守护线程区别这么大?

    在 Java 语言中线程分为两类:用户线程和守护线程,而二者之间的区别却鲜有人知,所以本文磊哥带你来看二者之间的区别,以及守护线程需要注意的一些事项. 1.默认用户线程 Java 语言中无论是线程还是 ...

  5. java并发编程(四)守护进程 线程阻塞的四种情况

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/17099981 守护线程   Java中有两类线程:User Thread(用户线程).Da ...

  6. Java用户线程和守护线程

    今天看Java一个关于多线程返回值方式的示例,发现一个自己不太能理解的问题,就是在主线程中启动了几个工作线程,主线程中也没有join,工作线程居然也是正常输出了回调的结果.这个跟linux C++下的 ...

  7. 【java多线程】用户线程和守护线程的区别

    java中线程分为两种类型:用户线程和守护线程.通过Thread.setDaemon(false)设置为用户线程:通过Thread.setDaemon(true)设置为守护线程.如果不设置次属性,默认 ...

  8. java 用户线程和守护线程

    在Java中通常有两种线程:用户线程和守护线程(也被称为服务线程)通过Thread.setDaemon(false)设置为用户线程通过Thread.setDaemon(true)设置为守护线程线程属性 ...

  9. JAVA笔记13__创建线程/线程休眠/等待线程终止/线程中断/守护线程

    /** * 线程:是进程的一个执行路径,共享一个内存空间,线程之间可以自由切换,并发执行,一个进程最少有一个进程(单线程程序) * 多线程两种实现方法:1.继承Thread类 2.实现Runnable ...

随机推荐

  1. tomcat 开机自启

    d /usr/lib/systemd/system touch tomcat.service chmod 777 tomcat.service vi tomcat.service [Unit]Desc ...

  2. ASP.NET Core搭建多层网站架构【14-扩展之部署到IIS】

    2020/02/03, ASP.NET Core 3.1, VS2019, IIS 10, dotnet-hosting-3.1.1-win.exe 摘要:基于ASP.NET Core 3.1 Web ...

  3. 2_2 3n+1问题

    猜想:对于任意大于1的自然数n,若n为奇数,则将n变为3n+1,否则变为n的一半.经过若干次这样的变换,一定会使n变为1.例如:3→10→5→16→8→4→2→1. 输入n,输出变换的次数.n< ...

  4. Vue 项目中使用less

    首先 你得有 完整的 Vue开发环境第一步 安装less 依赖 npm install less less-loader --save 第二步 修改webpack.config.js文件,配置load ...

  5. stackADT

    stack.h #ifndef STACK_H_INCLUDED #define STACK_H_INCLUDED #include <stdbool.h> typedef struct ...

  6. 洛谷P1086花生采摘(简单模拟)

    题目描述 鲁宾逊先生有一只宠物猴,名叫多多.这天,他们两个正沿着乡间小路散步,突然发现路边的告示牌上贴着一张小小的纸条:“欢迎免费品尝我种的花生!――熊字”. 鲁宾逊先生和多多都很开心,因为花生正是他 ...

  7. Codeforces Round #619 (Div. 2) Ayoub's function

    Ayoub thinks that he is a very smart person, so he created a function f(s)f(s) , where ss is a binar ...

  8. 在java的静态方法中访问类的实例成员

    直接来看代码: public class Example { int x = 3;//类的实例变量,初始化值为3 static int y = 4;//类的静态变量,初始化值为4 public sta ...

  9. Codeforces Round #593 (Div. 2)D(螺旋形模拟)

    #define HAVE_STRUCT_TIMESPEC#include<bits/stdc++.h>using namespace std;vector<int>po[100 ...

  10. 在Linux CentOS 下安装JDK 1.8

    一首先去官网下载linux 版本JDK1.8  http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-21331 ...