java并发编程基础(二)

2019-08-24  本文已影响0人  smallmartial

1.Daemon线程

Daemon是一个支持型线程,他主要被用作程序中后台调度以及支持性工作。

(Daemon属性需要在启动线程之前设置,不能在启动线程之后设置)

Daemon`完成工作后,finally块不一定执行

package cn.smallmartial.concurrency;

/**
 * @Author smallmartial
 * @Date 2019/8/23
 * @Email smallmarital@qq.com
 */
public class Daemon {
    public static void main(String[] args) {
        Thread daemmonRunner = new Thread(new DaemonRunner(), "DaemmonRunner");
        daemmonRunner.setDaemon(true);
        daemmonRunner.start();
    }

    private static class DaemonRunner implements Runnable {
        @Override
        public void run() {
            try {
                SleepUtils.second(10);
            } catch (Exception e) {
                e.printStackTrace();
            }finally {
                System.out.println("finally run ...");
            }
        }
    }
}

1566571102636.png

在构建Daemon线程时,不能依靠finally块中的内容来确保执行关闭或者清理资源的逻辑

2.线程中断位

1566573244285.png

3.过期的suspend()、resume()和stop()

这些api不建议使用,在调用后、线程不会释放已占有的资源(比如锁),而是占有者资源进入睡眠状态,会引发死锁状态。

4.volatile和synchronized关键字

5.对象、对象的监视器、同步队列和执行线程之间的关系

synochrized关系图.png

任意线程对object访问时(synchronized保护),首先要获得Object的监视器,如果获取失败,线程则进入同步队列,线程状态变成blocked.当访问前驱object释放了锁,则该释放操作唤醒阻塞在同步队列的线程,使其重新尝试对监视器的获取。

上一篇 下一篇

猜你喜欢

热点阅读