创建模式
创建模式Metadatatitle: 创建模式
date: 2022-12-14 15:14
tags:
-
categories:
-
keywords:
-
description: 创建型模式提供了创建对象的机制, 能够提升已有代码的灵活性和可复用性。
简介创建型模式提供了创建对象的机制, 能够提升已有代码的灵活性和可复用性。
【Java 多线程并发】 final
【Java 多线程并发】 finalMetadatatitle: 【Java 多线程并发】 final
date: 2022-12-14 15:02
tags:
- 行动阶段/完成
- 主题场景/编程
- 笔记空间/KnowladgeSpace/ProgramSpace
- 细化主题/Java/多线程并发
categories:
- Java
keywords:
- Java/多线程并发
description: 多线程并发 final
final 基础使用修饰类当某个类的整体定义为 final 时,就表明了你不能打算继承该类,而且也不允许别人这么做。即这个类是不能有子类的。
注意:final 类中的所有方法都隐式为 final,因为无法覆盖他们,所以在 final 类中给任何方法添加 final 关键字是没有任何意义的。
修饰方法
private 方法是隐式的 final
final 方法是可以被重载的
private final类中所有 private 方法都隐式地指定为 final 的,由于无法取用 private 方法,所以也就不能覆盖它。可以对 p ...
【Java 多线程并发】 volatile
【Java 多线程并发】 volatileMetadatatitle: 【Java 多线程并发】 volatile
date: 2022-12-14 15:00
tags:
- 行动阶段/完成
- 主题场景/编程
- 笔记空间/KnowladgeSpace/ProgramSpace
- 细化主题/Java/多线程并发
categories:
- Java
keywords:
- Java/多线程并发
description: 多线程并发 volatile
volatile 的作用详解防重排序public class Singleton {
public static volatile Singleton singleton;
private Singleton() {};
public static Singleton getInstance() {
if (singleton == null) {
synchronized (singleton.class) {
...
【Java 多线程并发】synchronized
【Java 多线程并发】synchronizedMetadatatitle: 【Java 多线程并发】synchronized
date: 2022-12-14 14:57
tags:
- 行动阶段/完成
- 主题场景/编程
- 笔记空间/KnowladgeSpace/ProgramSpace
- 细化主题/Java/多线程并发
categories:
- Java
keywords:
- Java/多线程并发
description: 多线程并发 Synchronized
【Java 多线程并发】synchronized
在Java中除了提供Lock API外还在语法层面上提供了synchronized关键字来实现互斥同步原语
在应用 Sychronized 关键字时需要把握如下注意点:
一把锁只能同时被一个线程获取,没有获得锁的线程只能等待;
每个实例都对应有自己的一把锁 (this), 不同实例之间互不影响;例外:锁对象是 *.class 以及 synchronized 修饰的是 static 方法的时候,所有对象公用同一把锁
synchronize ...
Java 多线程并发
Java 多线程并发Metadatatitle: Java 多线程并发
date: 2022-12-14 14:56
tags:
- 行动阶段/完成
- 主题场景/程序
- 笔记空间/KnowladgeSpace/ProgramSpace/BasicsSpace
- 细化主题
categories:
- Java
keywords:
- Java/多线程并发
description: Java 多线程并发
Java 多线程并发
【Java 多线程并发】 基础undefined
【Java 多线程并发】 原理undefined
【Java 多线程并发】 locksundefined
Java 多线程并发
Java 多线程并发Metadatatitle: Java 多线程并发
date: 2022-12-14 14:56
tags:
- 行动阶段/完成
- 主题场景/程序
- 笔记空间/KnowladgeSpace/ProgramSpace/BasicsSpace
- 细化主题
categories:
- Java
keywords:
- Java/多线程并发
description: Java 多线程并发
Java 多线程并发
【Java 多线程并发】 理论基础undefined
【Java 多线程并发】 finalundefined
【Java 多线程并发】 volatileundefined
【Java 多线程并发】synchronizedundefined
【Java 多线程并发】 理论基础
【Java 多线程并发】 理论基础Metadatatitle: 【Java 多线程并发】 理论基础
date: 2022-12-14 14:55
tags:
- 行动阶段/完成
- 主题场景/编程
- 笔记空间/KnowladgeSpace/ProgramSpace
- 细化主题/Java/多线程并发
categories:
- Java
keywords:
- Java/多线程并发
description: 多线程并发 理论基础
多线程的意义众所周知,CPU、内存、I/O 设备的速度是有极大差异的,为了合理利用 CPU 的高性能,平衡这三者的速度差异,计算机体系结构、操作系统、编译程序都做出了贡献,主要体现为:
CPU 增加了缓存,以均衡与内存的速度差异;// 导致 可见性问题
操作系统增加了进程、线程,以分时复用 CPU,进而均衡 CPU 与 I/O 设备的速度差异;// 导致 原子性问题
编译程序优化指令执行次序,使得缓存能够得到更加合理地利用。// 导致 有序性问题
并发出现问题的根源: 并发三要素可见性: CPU 缓存引起可见性:一个线程对共享变 ...
【Java JVM】内存模型
【Java JVM】内存模型Metadatatitle: 【Java JVM】内存模型
date: 2022-12-14 14:50
tags:
- 行动阶段/未完成
- 主题场景/编程
- 笔记空间/KnowladgeSpace/ProgramSpace
- 细化主题/Java/JVM
categories:
- Java
keywords:
- Java/JVM
description: JAVA 内存模型
JMM 引入从堆栈说起JVM 内部使用的 Java 内存模型在线程栈和堆之间划分内存。 此图从逻辑角度说明了 Java 内存模型:
堆栈里面放了什么?线程堆栈还包含正在执行的每个方法的所有局部变量 (调用堆栈上的所有方法)。 线程只能访问它自己的线程堆栈。 由线程创建的局部变量对于创建它的线程以外的所有其他线程是不可见的。 即使两个线程正在执行完全相同的代码,两个线程仍将在每个自己的线程堆栈中创建该代码的局部变量。 因此,每个线程都有自己的每个局部变量的版本。
基本类型的所有局部变量 (boolean,byte,short,char,int,long ...
【Java JVM】 内存结构
【Java JVM】 内存结构Metadatatitle: 【Java JVM】 内存结构
date: 2022-12-14 14:48
tags:
- 行动阶段/完成
- 主题场景/编程
- 笔记空间/KnowladgeSpace/ProgramSpace
- 细化主题/Java/JVM
categories:
- Java
keywords:
- Java/JVM
description: JAVA 内存结构
运行时数据区内存是非常重要的系统资源,是硬盘和 CPU 的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM 内存布局规定了 Java 在运行过程中内存申请、分配、管理的策略,保证了 JVM 的高效稳定运行。不同的 JVM 对于内存的划分方式和管理机制存在着部分差异。
下图是 JVM 整体架构,中间部分就是 Java 虚拟机定义的各种运行时数据区域。
Java 虚拟机定义了若干种程序运行期间会使用到的运行时数据区,其中有一些会随着虚拟机启动而创建,随着虚拟机退出而销毁。另外一些则是与线程一一对应的,这些与线程一一对应的数据区域会随着线程开始 ...
【Java JVM】JAVA 类加载机制
【Java JVM】JAVA 类加载机制Metadatatitle: 【Java JVM】JAVA 类加载机制
date: 2022-12-14 14:47
tags:
- 行动阶段/完成
- 主题场景/编程
- 笔记空间/KnowladgeSpace/ProgramSpace
- 细化主题/Java/JVM
categories:
- Java
keywords:
- Java/JVM
description: JAVA 类加载机制
类的生命周期其中类加载的过程包括了加载、验证、准备、解析、初始化五个阶段。在这五个阶段中,加载、验证、准备和初始化这四个阶段发生的顺序是确定的,_而解析阶段则不一定,它在某些情况下可以在初始化阶段之后开始,这是为了支持 Java 语言的运行时绑定 (也成为动态绑定或晚期绑定)_。另外注意这里的几个阶段是按顺序开始,而不是按顺序进行或完成,因为这些阶段通常都是互相交叉地混合进行的,通常在一个阶段执行的过程中调用或激活另一个阶段。
类的加载: 查找并加载类的二进制数据加载时类加载过程的第一个阶段,在加载阶段,虚拟机需要完成以下三件 ...