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()与线程的状态与生命周期与守护进程相关推荐

  1. [转]Java 对象锁-synchronized()与线程的状态与生命周期

    线程的状态与生命周期 Java 对象锁-synchronized() ? 1 2 3 4 synchronized(someObject){ //对象锁 } 对象锁的使用说明: 1.对象锁的返还. 当 ...

  2. 一张图弄懂java线程的状态和生命周期

    转载自 一张图弄懂java线程的状态和生命周期 上图是一个线程的生命周期状态流转图,很清楚的描绘了一个线程从创建到终止的过程. 这些状态的枚举值都定义在java.lang.Thread.State下 ...

  3. Java内部锁(synchronized)中类锁和对象锁

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/77688880冷血之心的博客) synchronized是Java提 ...

  4. java并发编程实践学习---java的类锁和对象锁

    最近在看Java Concurrent in Practice(java并发编程实践),发现自己对java的线程.锁等机制,理解很肤浅,学习的也不够全面.打算借着这本书,全面的学习下JDK的并发包和一 ...

  5. Java 类锁、对象锁、私有锁

    3.6 Java类锁.对象锁.私有锁.隐式锁 类锁和对象锁是否会冲突?对象锁和私有锁是否会冲突?通过实例来进行说明. 一.相关约定 为了明确后文的描述,先对本文涉及到的锁的相关定义作如下约定: 1. ...

  6. 网易java默认路径_java对象存储位置

    作者:牛小宝 1. Java内存管理 1.1 Java运行时的内存区域 Java的内存区域包括线程私有区域和线程共享区域两种,其中线程私有区域有:程序计数器,虚拟机栈和本地方法栈,这些内存区域是每个线 ...

  7. 详解java中Thread类,线程和进程的基本区别,多线程的好处,线程的五个生命周期,主线程和IDEA创建的Monitor Ctrl-Break守护线程;优雅地终止线程。死锁的产生

    线程:CPU调度的最小单位:线程共享堆内存和方法区,但各自享有栈空间.进程:CPU分配资源的最小单位. 为什么需要多线程:①避免其中一个模块阻塞造成系统假死:②程序异步处理(交替执行),提高程序执行效 ...

  8. Java多线程——线程的优先级和生命周期

    Java多线程--线程的优先级和生命周期 摘要:本文主要介绍了线程的优先级以及线程有哪些生命周期. 部分内容来自以下博客: https://www.cnblogs.com/sunddenly/p/41 ...

  9. 线程知识点(一)—— 程序、进程、线程之间的区别与联系、Java的线程状态和生命周期

    1 程序.进程.线程之间的区别与联系 三者之间的形象化理解: * 程序:代码实现了功能,就是程序,是静态的: * 进程:执行中的程序就是进程,是动态的: * 线程:进程内的一个执行单元,也是进程内的可 ...

最新文章

  1. css 选择器 伪元素_CSS伪元素-解释选择器之前和之后
  2. Redis Sentinel机制与用法
  3. 点击右侧导航栏,实现iframe嵌入子页面中div,滑动到最上面
  4. .NET Core 跨平台执行命令、脚本
  5. SpringBoot集成FastDFS依赖实现文件上传
  6. c# 写文件注意问题及用例展示
  7. C++实现的队列queue
  8. 《洛克菲勒留给儿子的38封信》 第四封:现在就去做
  9. yum安装软件提示Another app is currently holding the yum lock
  10. LOCK TABLES
  11. sha 2 java加密_java中的SHA2密码哈希
  12. java两个和三个_H2DB和Java,大约两个小时的差异
  13. eclipse创建maven项目的创建
  14. .NET Framework第一二课(7/26、27)
  15. 如何修改电脑微信的提示音(亲测有效)
  16. 极小曲面壳体的静力学分析(ABAQUS)
  17. 台式计算机无故重启,台式电脑突然自动重启是怎么回事
  18. 【白帽子学习笔记 22】网络扫描与网络侦查
  19. DQ77KB刷bios工程小记-old文章备份
  20. 【点云3D目标检测】跑通CIA-SSD过程中的一些报错集锦

热门文章

  1. sql 递归查询所有的下级
  2. Android开发四 开发第一个Android应用
  3. 二十个你必须知道的SEO概念
  4. python报错:TypeError: 'str' object is not callable
  5. Win10中VMware14安装CentOS7详细步骤
  6. linux编译安装Nginx1.6.0+MySQL5.6.19+PHP5.5.14
  7. Laravel安装因PHP版本不对的bug
  8. mysql行转列sql函数_sql动态行转列的两种方法
  9. 完整的url以及同源跨域处理
  10. canvas整体放大_【HTML5】Canvas 实现放大镜效果