文档章节

Java 对象锁-synchronized()与线程的状态与生命周期与守护进程

Oscarfff
 Oscarfff
发布于 2015/05/04 10:18
字数 720
阅读 949
收藏 4

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

synchronized(someObject){

//对象锁
}

一、对象锁 someObject 的使用说明:

1、对象锁的返还。

      当synchronize()语句执行完成。

      当synchronize()语句执行出现异常。

      当线程调用了wait()方法。

2、使用对象锁保护的数据都必须是私有的。

也就是说someObject 变量必须是private


3、对象锁具有可重入性。

一个线程在已经获得对象锁的情况下,可以再次请求获得对象锁。


二、线程的生命周期

线程run()方法结束之后,这个线程就是死的了。可能会被回收了。


线程周期以及线程转换可以参考博文

http://blog.csdn.net/LonelyRoamer/article/details/7949969

jvm 内幕报文参考

http://www.importnew.com/17770.html

这里所说的线程指程序执行过程中的一个线程实体。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死了,那守护进程也挂了。



© 著作权归作者所有

Oscarfff
粉丝 72
博文 816
码字总数 97116
作品 0
崇明
后端工程师
私信 提问
Android 面试必备 - 线程

前言 最近准备更新 Android 面试必备基础知识系列,有兴趣的可以关注我的微信公众号 stormjun94,有更新时,第一时间会在微信公众号上面发布,同时,也会同步在 GitHub 上面更新,如果觉得对...

gdutxiaoxu_
08/04
0
0
Java语言学习(十二):多线程

Java中给多线程编程提供了内置的支持,多线程是多任务的一种特别形式,它使用了更小的资源开销。这里需要知道两个术语及其关系:进程和线程。 进程:进程是系统进行资源分配和调度的一个独立...

海岸线的曙光
2018/07/19
25
0
Java并发编程笔记之基础总结(二)

一.线程中断 Java 中线程中断是一种线程间协作模式,通过设置线程的中断标志并不能直接终止该线程的执行,而是需要被中断的线程根据中断状态自行处理。   1.void interrupt() 方法:中断线...

狂小白
2018/07/17
0
0
java并发多线程面试题和答案

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010741376/article/details/46427235 1.java中有几种方法可以实现一个线程? 两种,一种是实现Runnable接口,...

程序界小强
01/17
0
0
Java并发基础你需要知道的基础知识

多线程和并发编程是Java里面的核心内容,通常有以下一些概念需要重点掌握。 线程; 锁; 同步器; 并发容器和框架; Java并发工具类; 原子操作类; Executor框架(执行机制); 并发基础概念 ...

异步社区
2018/05/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

JVM性能调优的6大步骤,及关键调优参数详解

JVM内存调优 对JVM内存的系统级的调优主要的目的是减少GC的频率和Full GC的次数。 1.Full GC 会对整个堆进行整理,包括Young、Tenured和Perm。Full GC因为需要对整个堆进行回收,所以比较慢,...

一只会编程的狼
14分钟前
6
0
并发和并行性有什么区别?

并发和并行性有什么区别? 示例被赞赏。 #1楼 并发性:具有共享资源潜力的多个执行流 例如:两个线程争用一个I / O端口。 平行主义:将问题分成多个相似的块。 例如:通过在文件的每半部分上...

javail
17分钟前
4
0
(推荐使用)提高开发效率工具集合

提高开发效率工具集合(推荐使用) 一、Hutool工具类 官网地址:https://www.hutool.cn/ Github地址:https://github.com/looly/hutool/ Gitee 地址:https://gitee.com/loolly/hutool/ 文档参...

明德先生
20分钟前
4
0
java并发-缓存一致性协议和内存屏障的思考和理解

################这是之前的思考 内存屏障只是保证清空流水线,如何保证高速缓存的内容更新到最新或刷新到主存呢?这个问题突然想到了,不知道这个需要怎回答。 内存屏障保证的CPU执行执行序...

萧默
24分钟前
5
0
类型名称后面的括号是否与new有所不同?

如果“测试”是普通类,则之间是否有任何区别: Test* test = new Test; 和 Test* test = new Test(); #1楼 new Thing(); 很明显,您想要一个构造函数,而new Thing; 表示您不介意是否未调...

技术盛宴
48分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部