目录

一、调度(五):环境

1.随机调度大环境

二、锁(二):位置/阻塞/重入/连续

1.位置

2.无锁阻塞

3.重入锁

4.连续锁

4.1措施

三、线程方法(二):wait/notify等待通知机制

1.wait

2.notify

3.wait-notify指位后移

3.1可能时再检查

3.1.1join(二)

3.1.1.1可能时再检查死亡

四、单例模式

1.实现

1.1private构造器

1.2一次一个

1.3静态存储

2.样式

2.1饿汉模式

2.2懒汉模式


一、调度(五):环境

知识连接:

调度(一):概念和属性

调度(二):进程和线程的调度、调度(三):调度的线程量

调度(四):优先级

1.随机调度大环境

随机调度大环境 里面有 锁竞争阻塞,里面又有 代码块的竞锁能力


二、锁(二):位置/阻塞/重入/连续

知识连接:

锁(一):对象的锁属性[作用/实现/修饰/危害]

锁(三):锁策略

锁(四):synchronized&ReentrantLock

1.位置

锁只在竞争中 跳跃存在


2.无锁阻塞

竞争无锁处 被锁阻塞


3.重入锁

线程重入锁处运行态其它代码块被锁阻塞 无竞争高效地获取锁


4.连续锁

线程连续竞同锁 会因上把锁出时 还处运行态其他同锁竞争线程的 阻塞刚唤醒态 容易连续调度 去竞争到同锁

4.1措施

可在上把锁 用wait后移 消除连续调度竞争避免造成 线程饿死


三、线程方法(二):wait/notify等待通知机制

知识连接:

线程方法(一):中断和等待

线程方法(三):wait-notify锁自定协调

1.wait

锁的wait方法 对身竞争代码块 停位地 封印其竞锁能力,便也失去了锁,处于无法参与竞争的 永阻塞状态

  • wait(时间)设置最长等待时间自动唤醒

2.notify

锁的notify方法 对异竞争代码块 续位地 恢复其竞锁能力,在瞬时间内 处回可参与竞争的 现阻塞状态

  • notify 随机唤醒一个此锁wait线程,notifyAll 唤醒所有此锁wait线程

3.wait-notify指位后移

锁的wait方法 将身线程wait后部分 阻塞往后放到 异线程锁noity方法的后面,应用案例:

3.1可能时再检查

循环连续的wait阻塞 等着只为每次可能情况时 再notify对接 来唤醒检查一下提高了检查的情况针对性

3.1.1join(二)

知识连接:

join(一)

join使当前线程 执行卡在该方法 直到该线程实例的系统线程死亡 才执行完退出来,将当前线程后部分 阻塞往后放到 目标系统线程死亡的后面

3.1.1.1可能时再检查死亡

系统线程销毁死亡后,对应的线程实例自动调用notifyAll,所以就可以针对线程实例notify时 才对线程进行死亡检查

public final synchronized void join(long millis) throws InterruptedException {
    while (this.isAlive()) {
        wait(millis);
    }
}

四、单例模式

1.实现

1.1private构造器

private向外 封闭构造器 无法外部创建实例


1.2一次一个

内部只创建一次一个


1.3静态存储

放静态中 外部才可 对类的仅静态取出


2.样式

2.1饿汉模式

必创建地 类加载时就创建实例:

class SingletonHungry {
    private static SingletonHungry instance = new SingletonHungry();//static静态存储,只有类加载时的创建一次一个
    private SingletonHungry() {}//private封闭构造器
    public static SingletonHungry getInstance() {//封装好获取
        return instance;
    }
}

2.2懒汉模式

需要时 才调用接口去创建实例:

class SingletonLazy {
    private static SingletonLazy instance = null;//static静态存储
    private SingletonLazy() {}//private封闭构造器
    public static SingletonLazy getInstance() {
        if (instance == null) { //优化时 线程不加锁能过(只读)情况 就拎开 少加点锁 分开处理掉
            synchronized (SingletonLazy.class) {//写的这块范围内 线程安全问题保障:
                if (instance == null) {//->连续读取instance的null时,两次没有前后影响到 都读为null 都去创建实例
                    instance = new SingletonLazy();
                }
                return instance;
            }
        }
        return instance;
    }
}

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐