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

孤人 提交于 2019-11-30 15:26:50
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死了,那守护进程也挂了。



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!