java中守护线程的一些概念和用法】的更多相关文章

网上的资料中,守护线程的功能一般都是“只要当前JVM实例中尚存任何一个非守护线程没有结束,守护线程就全部工作:只有当最后一个非守护线程结束是,守护线程随着JVM一同结束工作,Daemon作用是为其他线程提供便利服务,守护线程最典型的应用就是GC(垃圾回收器),他就是一个很称职的守护者.”可是,我发现真实情况却不是描述的这么回事,因为我对java也不懂,所以在此记录一下守护线程中的一些问题. 我的思路是:在main线程中建立两个线程,一个线程A只打印一行信息就退出,它被设置成守护线程,另一个线程B…
https://www.cnblogs.com/ziq711/p/8228255.html 在Java中有两类线程:User Thread(用户线程).Daemon Thread(守护线程) 用个比较通俗的比如,任何一个守护线程都是整个JVM中所有非守护线程的保姆: 只要当前JVM实例中尚存在任何一个非守护线程没有结束,守护线程就全部工作:只有当最后一个非守护线程结束时,守护线程随着JVM一同结束工作.Daemon的作用是为其他线程的运行提供便利服务,守护线程最典型的应用就是 GC (垃圾回收器…
在Java中有两类线程:User Thread(用户线程).Daemon Thread(守护线程) 用个比较通俗的比如,任何一个守护线程都是整个JVM中所有非守护线程的保姆: 只要当前JVM实例中尚存在任何一个非守护线程没有结束,守护线程就全部工作:只有当最后一个非守护线程结束时,守护线程随着JVM一同结束工作.Daemon的作用是为其他线程的运行提供便利服务,守护线程最典型的应用就是 GC (垃圾回收器),它就是一个很称职的守护者. User和Daemon两者几乎没有区别,唯一的不同之处就在于…
java 中的线程分为两种:守护线程(Daemon)和用户线程(User). 任何线程都可以设置为守护线程和用户线程,通过方法 Thread.setDaemon(bool on):true 则把该线程设置为守护线程,反之则为用户线程.Thread.setDaemon() 必须在 Thread.start()之前调用,否则运行时会抛出异常. 两者的区别: 唯一的区别是判断虚拟机(JVM)何时离开,Daemon 是为其他线程提供服务,如果 全部的 User Thread 已经撤离,Daemon 没有…
一.程序.进程和线程   程序是一组指令的有序集合,也可以将其通俗地理解为若干行代码.它本身没有任何运行的含义,它只是一个静态的实体,它可能只是一个单纯的文本文件,也有可能是经过编译之后生成的可执行文件.   从狭义来说,进程是正在运行的程序的实例:从广义上来说,进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动.进程是操作系统进行资源分配的基本单位.   线程是进程中可独立执行的最小单位,它也是处理器进行独立调度和分派的基本单位.一个进程可以包含多个线程,每个线程执行自己的任务,同…
在前面的<兵分三路:如何创建多线程>文章中,我们已经通过Thread和Runnable直观地了解如何在Java中创建一个线程,相信你已经有了一定的体感.在本篇文章中,我们将基于前面的示例代码,对线程做些必要的说明,以帮助你从更基础的层面认知线程,并为后续的学习打下基础. 一.从进程认知线程 在上世纪的80年代中期之前,进程一直都是操作系统中拥有资源和独立运行的基本单位.可是,随着计算机的发展,人们对操作系统的吞吐量要求越来越高,并且多处理器也逐渐发展起来,进程作为基本的调度单位已经越来越不合时…
进程和线程 联想一下现实生活中的例子--烧开水,烧开水时是不是不需要在旁边守着,交给热水机完成,烧开水这段时间可以去干一点其他的事情,例如将衣服丢到洗衣机中洗衣服.这样开水烧完,衣服洗的也差不多了.这样既能喝到热水,衣服也差不多了. 操作系统中将多个程序(例如上面的热水机进程和洗衣机进程)同时进行.交替执行的称之为进程. 那么操作系统为什么需要进程. 通常,操作系统进行IO处理相比计算慢得多 通过Java 进行IO 和 运算测试,IO 的速率大概比运算慢200-400倍 而IO是不需要使用CPU…
我们知道大多数程序都不会是单线程程序,单线程程序的功能非常有限,我们假设一下所有的程序都是单线程程序,那么会带来怎样的结果呢?假如淘宝是单线程程序,一直都只能一个一个用户去访问,你要在网上买东西还得等着前面千百万人挑选购买,最后心仪的商品下架或者售空......假如饿了吗是单线程程序,那么一个用户得等前面全国千万个用户点完之后才能进行点餐,那饿了吗就该倒闭了不是吗?以上两个简单的例子,就说明一个程序能进行多线程并发访问的重要性,今天就让我们去了解一下Java中多线程并发访问这个方向吧. **第一…
守护线程的应用 Java中的线程可以分为两类,即用户线程和守护线程.用户线程是为了完成任务,而守护线程是为其他线程服务 --如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3894292.html "谢谢-- 守护线程的唯一用途是为其他线程提供服务.守护线程会随时中断,因此不要在守护线程上使用需要释放资源的资源,如输入输出流,数据库连接等所有的守护线程都是后台线程,如果虚拟机中只剩下守护线程,虚拟机就会退出 Thread类与守护线程相关…
Java 中的线程同步问题: 1. 线程同步: 对于访问同一份资源的多个线程之间, 来进行协调的这个东西. 2. 同步方法: 当某个对象调用了同步方法时, 该对象上的其它同步方法必须等待该同步方法执行完毕后, 才能被执行. 3. 同步块:    通常将共享资源的操作放置在 synchronized 定义的区域内, 这样当其它线程也获取到这个锁时, 必须等待锁被释放, 才能进入该区域. Demo_1: class Timer { private static int num = 0; public…
碎碎念 关于JDK源码相关的文章这已经是第四篇了,原创不易,粉丝从几十人到昨天的666人,真的很感谢之前帮我转发文章的一些朋友们. 从16年开始写技术文章,到现在博客园已经发表了222篇文章,大多数都是原创,共有800多粉丝,基本上每个月都会有文章的产出. 回顾这几年以来写作的心路历程,一直都是偷偷的写,偷偷的发,害怕被人知道,怕被人骂文章写的太水(之前心理太脆弱了,哈哈).后面和cxuan聊过后,他建议我给他投稿试试,于是就有了那一篇的万字的AQS文章. 最近也有好多读者加到我的微信,问一些文…
之前写过JAVA中创建线程的三种方法及比较.这次来说说线程池. JAVA中创建线程池主要有两类方法,一类是通过Executors工厂类提供的方法,该类提供了4种不同的线程池可供使用.另一类是通过ThreadPoolExecutor类进行自定义创建. 一.通过Executors类提供的方法. 1.newCachedThreadPool 创建一个可缓存的线程池,若线程数超过处理所需,缓存一段时间后会回收,若线程数不够,则新建线程. 代码例子: 1 private static void create…
摘要:Java中的线程到底有哪些安全策略呢?本文就为你彻底分析下! 本文分享自华为云社区<[高并发]线程安全策略>,作者:冰 河 . 一.不可变对象 不可变对象需要满足的条件 (1)对象创建以后其状态就不能修改(2)对象所有域都是final类型(3)对象是正确创建的(在对象创建期间,this引用没有溢出) 对于不可变对象,可以参见JDK中的String类 final关键字:类.方法.变量 (1)修饰类:该类不能被继承,String类,基础类型的包装类(比如Integer.Long等)都是fin…
http://hi.baidu.com/ochzqvztdbabcir/item/ab9758f9cfab6a5ac9f337d4 相濡以沫 Java语法总结 - 线程 一 提到线程好像是件很麻烦很复杂的事,事实上确实如此,涉及到线程的编程是很讲究技巧的.这就需要我们变换思维方式,了解线程机制的比较通用的技巧,写出高 效的.不依赖于某个JVM实现的程序来.毕竟仅仅就Java而言,各个虚拟机的实现是不同的.学习线程时,最令我印象深刻的就是那种不确定性.没有保障 性,各个线程的运行完全是以不可预料的…
线程生命周期-理解Java中的线程状态 在多线程编程环境下,理解线程生命周期和线程状态非常重要. 在上一篇教程中,我们已经学习了如何创建java线程:实现Runnable接口或者成为Thread的子类,但启动一个java线程,则需要先创建一个Thread实例,然后调用此实例上的start(),这个线程就被启动了并会调用run()方法执行任务. 线程状态 下图展示了java线程中的几种不同状态,我们创建一个线程并启动它,但该线程何时从状态Runnable变为Running以及Blocked则取决于…
首先来看一张图,下面这张图很清晰的说明了线程的状态与Thread中的各个方法之间的关系,很经典的! 在Java中创建线程有两种方法:使用Thread类和使用Runnable接口. 要注意的是Thread类也实现了Runnable接口,因此,从Thread类继承的类的实例也可以作为target传入这个构造方法.可通过这种方法实现多个线程的资源共享. 线程的生命周期: 1.新建状态(New):用new语句创建的线程对象处于新建状态,此时它和其它的java对象一样,仅仅在堆中被分配了内存 2.就绪状态…
JAVA中创建线程的方式有三种,各有优缺点,具体如下: 一.继承Thread类来创建线程 1.创建一个任务类,继承Thread线程类,因为Thread类已经实现了Runnable接口,然后重写run()方法,run()方法中的内容就是需要线程完成的任务. 2.创建一个任务类的对象,即创建了线程对象. 3.调用任务类对象的start()方法,来启动一个线程. 代码实例: public class TestThread extends Thread { public void run() { for…
与新建线程池相比线程池的优点 线程池的分类 ThreadPoolExector参数.执行过程.存储方式 阻塞队列 拒绝策略 10.1 Exector框架简介 10.1.1 Executor框架的两级调度模型 Exector框架目的是提高Java使用线程执行异步任务的效率,核心思想是把工作单元和执行机制分开,在此之前工作单元和执行机制的角色都由Java中的线程来扮演,在此之后执行机制由Exector来提供.主线程创建实现Runnable或者Callable接口的对象封装需要执行的任务,这一点和传统…
java中,线程的状态使用一个枚举类型来描述的.这个枚举一共有6个值: NEW(新建).RUNNABLE(运行).BLOCKED(锁池).TIMED_WAITING(定时等待).WAITING(等待).TERMINATED(终止.结束). 但是我发现大多数人的理解和上面的这六种还是有些差别,通常会加上阻塞状态,可运行状态,挂起状态. 这是Thread类描述线程状态的枚举类的源代码: public enum State { /** * Thread state for a thread which…
在java中如果要创建线程的话,一般有3种方法: 继承Thread类: 实现Runnable接口: 使用Callable和Future创建线程. 1. 继承Thread类 继承Thread类的话,必须重写run方法,在run方法中定义需要执行的任务. class MyThread extends Thread{ private static int num = 0; public MyThread(){ num++; } @Override public void run() { System.…
Java 中的线程状态转换: [注]:不是 start 之后就立刻开始执行, 只是就绪了(CPU 可能正在运行其他的线程). [注]:只有被 CPU 调度之后,线程才开始执行, 当 CPU 分配给你的时间片到了, 又回到就绪状态, 继续排队等候. 线程控制的基本方法: isAlive(): 判断线程是否还活着, start 之后,终止之前都是活的; getPriority(): 获得线程的优先级数值; setPriority(): 设置线程的优先级数值(线程室友优先级别的);   Thread.…
java中的线程安全是什么: 就是线程同步的意思,就是当一个程序对一个线程安全的方法或者语句进行访问的时候,其他的不能再对他进行操作了,必须等到这次访问结束以后才能对这个线程安全的方法进行访问 什么叫线程安全: 如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码.如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的. 或者说:一个类或者程序所提供的接口对于线程来说是原子操作或者多个线程之间的切换不会导致该接口的执行结果存在二…
查看java中的线程个数名称 package com.stono.thread2; import java.lang.management.ManagementFactory; import java.lang.management.ThreadInfo; import java.lang.management.ThreadMXBean; import java.util.concurrent.TimeUnit; public class Runnable2Threads implements…
java中的线程安全是什么: 就是线程同步的意思,就是当一个程序对一个线程安全的方法或者语句进行访问的时候,其他的不能再对他进行操作了,必须等到这次访问结束以后才能对这个线程安全的方法进行访问 什么叫线程安全: 如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码.如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的. 或者说:一个类或者程序所提供的接口对于线程来说是原子操作或者多个线程之间的切换不会导致该接口的执行结果存在二…
接着学习Java中的线程,线程范围内的共享数据! 一.线程范围内的数据共享定义 对于相同的程序代码,多个模块在同一个线程中共享一份数据,而在另外线程中运行时又共享另外一份数据. 共享数据中存在的问题,代码如下: // A 和 B共享数据data,但是在这种情况下 会存在问题 public class ThreadScopeShareData { private static int data = 0; public static void main(String[] args) { for (i…
Java中的线程之前也提到过,但是还是想再详细的学习一下,跟着张孝祥老师,系统的再学习一下. 一.线程中的互斥 线程安全中的问题解释:线程安全问题可以用银行中的转账 例题描述: 线程A与线程B分别访问同一个对象的方法,这样就会存在线程安全的问题,方法的作用是打印出字符串中的每一个字符,方法如下: public void output(String name) { int len = name.length(); for (int i = 0; i < len; i++) { System.out…
Java中实现线程的方式 Java中实现多线程的方式的方式中最核心的就是 run()方法,不管何种方式其最终都是通过run()来运行. Java刚发布时也就是JDK 1.0版本提供了两种实现方式,一个是继承Thread类,一个是实现Runnable接口.两种方式都是去重写run()方法,在run()方法中去实现具体的业务代码. 但这两种方式有一个共同的弊端,就是由于run()方法是没有返回值的,所以通过这两方式实现的多线程读无法获得执行的结果. 为了解决这个问题在JDK 1.5的时候引入一个Ca…
并发编程是Java语言的重要特性之一,"如何在Java中实现线程"是学习并发编程的入门知识,也是Java工程师面试必备的基础知识.本文从线程说起,然后用代码说明如何在Java中实现线程. 一.什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理器编程,也可以使用多线程对运算密集型任务提速.如果使用得当,线程可以有效地降低程序的开发和运维成本,同时能够提升程序的性能. 二.线程和进程有什么区别? 线程是进程的子集,…
在Java中,线程的安全实际上指的是内存的安全,这是由操作系统决定的. 目前主流的操作系统都是多任务的,即多个进程同时运行.为了保证安全,每个进程只能访问分配给自己的内存空间,而不能访问别的.分配给别的进程的内存空间,这一安全特性是由操作系统保障的.但是线程却与进程不同,因为在每个进程的内存空间中都会有一块特殊的公共区域,通常被称为堆(内存),这块内存区域是进程内所有的线程都可以访问得到的,这个特性是线程之间通信的一种方式,但是却会引发多个线程同时访问一块内存区域可能产生的一系列问题,这些问题被…
创建线程的方式: 继承thread 实现runnable 线程池 FurureTask/Callable 第一种:继承thread demo1: public class demo1 { public static void main(String[] args) { new MyThread().start(); } } class MyThread extends Thread{ public void run(){ System.out.println("线程创建"); } }…