java守护锁_Java 对象锁-synchronized()与线程的状态与生命周期与守护进程
synchronized(someObject){
//对象锁
}
一、对象锁 someObject 的使用说明:
1、对象锁的返还。
当synchronize()语句执行完成。
当synchronize()语句执行出现异常。
当线程调用了wait()方法。
2、使用对象锁保护的数据都必须是私有的。
也就是说someObject 变量必须是private
3、对象锁具有可重入性。
一个线程在已经获得对象锁的情况下,可以再次请求获得对象锁。
二、线程的生命周期
线程run()方法结束之后,这个线程就是死的了。可能会被回收了。
线程周期以及线程转换可以参考博文
jvm 内幕报文参考
这里所说的线程指程序执行过程中的一个线程实体。JVM 允许一个应用并发执行多个线程。Hotspot JVM 中的 Java 线程与原生操作系统线程有直接的映射关系。当线程本地存储、缓冲区分配、同步对象、栈、程序计数器等准备好以后,就会创建一个操作系统原生线程。Java 线程结束,原生线程随之被回收。操作系统负责调度所有线程,并把它们分配到任何可用的 CPU 上。当原生线程初始化完毕,就会调用 Java 线程的 run() 方法。run() 返回时,被处理未捕获异常,原生线程将确认由于它的结束是否要终止 JVM 进程(比如这个线程是最后一个非守护线程)。当线程结束时,会释放原生线程和 Java 线程的所有资源。
三、守护进程
现在理解守护进程就是 不影响主线程停止的线程。即使守护进程一直在执行,但是主进程停止了,并且jvm程序里面只有守护进程,那么jvm 将会退出。如下就是例子:
public class DaemonTest {
public static void main(String[] args) {
new WorkerThread().start();
try {
Thread.sleep(7500);
} catch (InterruptedException e) {
// handle here exception
}
System.out.println("Main Thread ending") ;
}}class WorkerThread extends Thread {
public WorkerThread() {
// When false, (i.e. when it's a user thread),
// the Worker thread continues to run.
// When true, (i.e. when it's a daemon thread),
// the Worker thread terminates when the main
// thread terminates.
setDaemon(true);
}
public void run() {
int count = 0;
while (true) {
System.out.println("Hello from Worker "+count++);
try {
sleep(5000);
} catch (InterruptedException e) {
// handle exception here
}
}
}}
运行结果为:
Hello from Worker 0
Hello from Worker 1
Main Thread ending
当守护进程打印了第一行的时候,
睡了5秒,
接下来醒了,打印第二行。
接着又睡了
主线程也睡了。
总结来看,就是守护进程其实不受主进程死活的影响。只要JVM活着,不过调用该守护进程的主进程死活,守护进程都可以运行,但是如果JVM死了,那守护进程也挂了。
java守护锁_Java 对象锁-synchronized()与线程的状态与生命周期与守护进程相关推荐
- [转]Java 对象锁-synchronized()与线程的状态与生命周期
线程的状态与生命周期 Java 对象锁-synchronized() ? 1 2 3 4 synchronized(someObject){ //对象锁 } 对象锁的使用说明: 1.对象锁的返还. 当 ...
- 一张图弄懂java线程的状态和生命周期
转载自 一张图弄懂java线程的状态和生命周期 上图是一个线程的生命周期状态流转图,很清楚的描绘了一个线程从创建到终止的过程. 这些状态的枚举值都定义在java.lang.Thread.State下 ...
- Java内部锁(synchronized)中类锁和对象锁
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/77688880冷血之心的博客) synchronized是Java提 ...
- java并发编程实践学习---java的类锁和对象锁
最近在看Java Concurrent in Practice(java并发编程实践),发现自己对java的线程.锁等机制,理解很肤浅,学习的也不够全面.打算借着这本书,全面的学习下JDK的并发包和一 ...
- Java 类锁、对象锁、私有锁
3.6 Java类锁.对象锁.私有锁.隐式锁 类锁和对象锁是否会冲突?对象锁和私有锁是否会冲突?通过实例来进行说明. 一.相关约定 为了明确后文的描述,先对本文涉及到的锁的相关定义作如下约定: 1. ...
- 网易java默认路径_java对象存储位置
作者:牛小宝 1. Java内存管理 1.1 Java运行时的内存区域 Java的内存区域包括线程私有区域和线程共享区域两种,其中线程私有区域有:程序计数器,虚拟机栈和本地方法栈,这些内存区域是每个线 ...
- 详解java中Thread类,线程和进程的基本区别,多线程的好处,线程的五个生命周期,主线程和IDEA创建的Monitor Ctrl-Break守护线程;优雅地终止线程。死锁的产生
线程:CPU调度的最小单位:线程共享堆内存和方法区,但各自享有栈空间.进程:CPU分配资源的最小单位. 为什么需要多线程:①避免其中一个模块阻塞造成系统假死:②程序异步处理(交替执行),提高程序执行效 ...
- Java多线程——线程的优先级和生命周期
Java多线程--线程的优先级和生命周期 摘要:本文主要介绍了线程的优先级以及线程有哪些生命周期. 部分内容来自以下博客: https://www.cnblogs.com/sunddenly/p/41 ...
- 线程知识点(一)—— 程序、进程、线程之间的区别与联系、Java的线程状态和生命周期
1 程序.进程.线程之间的区别与联系 三者之间的形象化理解: * 程序:代码实现了功能,就是程序,是静态的: * 进程:执行中的程序就是进程,是动态的: * 线程:进程内的一个执行单元,也是进程内的可 ...
最新文章
- css 选择器 伪元素_CSS伪元素-解释选择器之前和之后
- Redis Sentinel机制与用法
- 点击右侧导航栏,实现iframe嵌入子页面中div,滑动到最上面
- .NET Core 跨平台执行命令、脚本
- SpringBoot集成FastDFS依赖实现文件上传
- c# 写文件注意问题及用例展示
- C++实现的队列queue
- 《洛克菲勒留给儿子的38封信》 第四封:现在就去做
- yum安装软件提示Another app is currently holding the yum lock
- LOCK TABLES
- sha 2 java加密_java中的SHA2密码哈希
- java两个和三个_H2DB和Java,大约两个小时的差异
- eclipse创建maven项目的创建
- .NET Framework第一二课(7/26、27)
- 如何修改电脑微信的提示音(亲测有效)
- 极小曲面壳体的静力学分析(ABAQUS)
- 台式计算机无故重启,台式电脑突然自动重启是怎么回事
- 【白帽子学习笔记 22】网络扫描与网络侦查
- DQ77KB刷bios工程小记-old文章备份
- 【点云3D目标检测】跑通CIA-SSD过程中的一些报错集锦
热门文章
- sql 递归查询所有的下级
- Android开发四 开发第一个Android应用
- 二十个你必须知道的SEO概念
- python报错:TypeError: 'str' object is not callable
- Win10中VMware14安装CentOS7详细步骤
- linux编译安装Nginx1.6.0+MySQL5.6.19+PHP5.5.14
- Laravel安装因PHP版本不对的bug
- mysql行转列sql函数_sql动态行转列的两种方法
- 完整的url以及同源跨域处理
- canvas整体放大_【HTML5】Canvas 实现放大镜效果