Hello friend, I'm R|

Ritchie里其

园龄:2年6个月粉丝:4关注:7

枚举、单例模式

一、枚举Enum

1.1 简介

1.概念:枚举就是表示一些固定的值(常量) 使用枚举项表示这些固定的值 每一个枚举项 都是一个对象
2.定义枚举类的语法: 访问修饰符 enum 枚举类的名称{ 枚举项 }例如:public enum Color { }
3.特点:
A.枚举中的每一个项都是一个对象
B.所有的枚举类的父类都是Enum
C.枚举项必须定义在枚举类的第一行
D.枚举类中是可以有成员变量
E.枚举项中只能有私有的构造方法 默认也是私有的构造方法
F.枚举项可以直接通过枚举类.枚举项来进行访问
G.枚举类中可以有抽象方法 但是所有的枚举项必须实现这个抽象方法

1.2 常用方法

方法名称 方法摘要
ordinal() 返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。
compareTo(E o) 比较此枚举与指定对象的顺序。
[valueOf](../../java/lang/Enum.html#valueOf(java.lang.Class, java.lang.String))(Class enumType, String name) 返回带指定名称的指定枚举类型的枚举常量。
name() 返回此枚举常量的名称,在其枚举声明中对其进行声明。

二、线程生命周期

2.1 简介

1.生命周期 线程从出生到死亡的几种状态 线程的状态是固定的几种 所有可以使用枚举项来进行表示 例如:出生 ==>婴儿 ==>少年 ==>青年 ==>中年 ==>老年 ==>死亡
2.展示状态
3.获取线程状态 public Thread.State getState() ==>返回该线程的状态

image

三、 线程池

3.1 简介

1.常量池:用于存储字符串的字面值 便于管理维护字符串
2.线程池:用于管理与维护线程

3.2 步骤

A.通过线程池工具类 获取线程值对象 Executors(工具类)
B.创建一个任务对象 Callable实现类 或者是Runnable的实现类
C.将任务对象提交到线程池中
D.执行线程操作

3.2.1 获取线程池

方法名称 方法描述
public static ExecutorService newSingleThreadExecutor() 获取线程池(线程池中只有一个线程)
public static ExecutorService newFixedThreadPool(int nThreads) 创建一个可重用固定线程数的线程池

3.2.2 提交任务对象的方法

方法名称 方法描述
Future<?> submit(Runnable task) 提交一个 Runnable 任务用于执行
Future submit(Callable task) 提交一个返回值的任务用于执行

3.2.3 关闭线程池

方法名称 方法描述
void shutdown() 启动一次顺序关闭,执行以前提交的任务,但不接受新任务
List shutdownNow() 关闭线程池(停止所有的任务)

四 单例设计模式

4.1 简介

1.单例设计模式:有且仅实例化一个对象
2.保证实例化一个对象
A.私有的属性
B.私有的构造 ==>只能本类进行访问
C.公有的方法 ==> 实例化对象
3.分类: 饿汉模式 懒汉模式 双重锁模式 内部类 枚举
4.使用场景
A.加载配置文件
B.工具类的实现
C.spring 容器管理对象
package com.xxx.study01;
/**
* enum本身也是一个Class类
* enum里面没有无参构造,只有有参构造(String.class, int.class)
* @author 王则钰 Wyzel
* @date 2022/10/24 23:25
* @Description
*/
public enum EnumSingleton {
INSTANCE;
public EnumSingleton getInstance() {
return INSTANCE;
}
}

4.2 饿汉式

优点:没有锁的机制 效率比较高
缺点:项目启动的时候 会出现卡顿的现象
package com.xxx.study01;
/**
* 单例 - 饿汉式
* 缺点:浪费空间
* @author 王则钰 Wyzel
* @date 2022/10/24 22:59
* @Description
*/
public class HungrySingleton {
//构造器私有,别人无法new这个对象
private HungrySingleton() {
}
//上来先new一个
private final static HungrySingleton HUNGRY_SINGLETON = new HungrySingleton();
public static HungrySingleton getInstance() {
return HUNGRY_SINGLETON;
}
}

4.3 DCL懒汉式

优点:懒加载 随用随加载
缺点:在多线程中是不安全

4.4 双重锁-单例设计模式

优点:多线程安全
缺点:效率低
package com.xxx.study01;
/**
* 单例 - 懒汉式
* 反射可以破坏单例,那怎么解决呢?
* 答案:枚举
* @author 王则钰 Wyzel
* @date 2022/10/24 23:02
* @Description
*/
public class LazySingleton {
private LazySingleton() {
}
private volatile static LazySingleton lazySingleton;
//双重检测锁模式 - 懒汉式单例 DCL懒汉式
public static LazySingleton getInstance() {
if (lazySingleton == null) {
synchronized (LazySingleton.class) {
if (lazySingleton == null) {
lazySingleton = new LazySingleton(); //非原子性操作
//上面加一个volatitle避免lazySingleton指令重排
}
}
}
return lazySingleton;
}
}

4.5 内部类-单例设计模式

优点: 安全性高
缺点: 效率低
package com.xxx;
public class Holer {
private Holer (){
}
static class HolderSingin{
private static final Holer h = new Holer();
}
public static Holer getInstance() {
return HolderSingin.h;
}
}
package com.xxx;
public class Test01 {
public static void main(String[] args) {
Holer h1 = Holer.getInstance();
Holer h2 = Holer.getInstance();
System.out.println(h1==h2);
}
}

本文作者:Ritchie里其

本文链接:https://www.cnblogs.com/wang-zeyu/p/16823168.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Ritchie里其  阅读(305)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
✨欢迎你~🍻
✨欢迎你~🍻
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 遥か Aimer
遥か - Aimer
00:00 / 00:00
An audio error has occurred.

作词 : aimerrhythm/田中ユウスケ

作曲 : 田中ユウスケ

编曲 : 玉井健二/百田留衣

海岸線の雨に ちらばった君の影

思い出が交差する 海辺の街

君はあの日のまま いまも夢を見てた

君はあの日のまま いまも夢を見てた

遥か記憶の空 2人照らす光

遥か記憶の空 2人照らす光

膝までの浅瀬で 見つけた星

君まで届くなんてさ ありえないような

浅い眠りの中で 深い夢から覚めて

浅い眠りの中で 深い夢から覚めて

裸足のまま駆けてく まばゆい星

君はあの日のまま どんな夢を見てた?

君はあの日のまま どんな夢を見てた?

遥か記憶の空 2人照らす光

遥か記憶の空 2人照らす光

いつまでもこうして 笑っててほしい

夜空に舞い上がる 幾千の花びら

でたらめな誓いで 生きてく日々

君から届くなんてさ ありえないような