线程安全

Map构造器模式 map builder pattern

拥有回忆 提交于 2019-11-26 12:18:46
maven引入依赖 <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>20.0</version> </dependency> java代码 ImmutableMap<String, Object> jsonObject = ImmutableMap.<String, Object>builder() .put("duration", duration) .put("uuid", uuid) .put("meta", MediaService.toJsonObject(meta)) .build(); 注意事项:map的value值不能为null, ImmutableMap是不可再修改的集合,使用过程中不可以更改其中的值,不可修改也就线程安全了。相关的框架还有一个叫Immutables的,由于IDE支持不好,笔者没有去研究。 来源: https://www.cnblogs.com/passedbylove/p/11319671.html

【设计模式】单例模式的八种姿态写法分析

混江龙づ霸主 提交于 2019-11-26 09:48:48
目录 何谓单例模式? 单例模式的优点 单例模式实现整体思路流程 单例模式的适用场景 单例模式的八种姿态写法 JDK源码中单例模式的应用 单例模式总结 前言 网上泛滥流传单例模式的写法种类,有说7种的,也有说6种的,当然也不排除说5种的,他们说的有错吗?其实没有对与错,刨根问底,写法终究是写法,其本质精髓大体一致!因此完全没必要去追究写法的多少,有这个时间还不如跟着宜春去网吧偷耳机、去田里抓青蛙得了,一天天的.... 言归正传...单例模式是最常用到的设计模式之一,熟悉设计模式的朋友对单例模式绝对不会陌生。同时单例模式也是比较简单易理解的一种设计模式。 @ 何谓单例模式? 专业术语 单例模式是一种常用的软件设计模式,其定义是单例对象的类只能允许一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方式简化了在复杂环境下的配置管理。 单例模式,简单的说就是 一个类只能有一个实例,并且在整个项目中都能访问到这个实例。 单例模式的优点 1、在内存中只有一个对象,节省内存空间。 2、避免频繁的创建销毁对象,可以提高性能。 3、避免对共享资源的多重占用。 4、可以全局访问。 单例模式实现整体思路流程

JVM集训-----内存结构

旧街凉风 提交于 2019-11-26 08:59:32
摘自: https://www.cnblogs.com/lowerma/p/11929041.html JVM集训-----内存结构 一、程序计数器/PC寄存器 ( Program Counter Registe )   用于 保存当前正在执行的程序的内存地址(下一条jvm指令的执行地址) ,由于Java是支持多线程执行的,所以程序执行的轨迹不可能一直都是线性执行。当有多个线程交叉执行时,被中断的线程的程序当前执行到哪条内存地址必然要保存下来,以便用于被中断的线程恢复执行时再按照被中断时的指令地址继续执行下去。为了线程切换后能恢复到正确的执行位置, 每个线程都需要有一个独立的程序计数器 ,各个线程之间计数器互不影响,独立存储,我们称这类内存区域为“线程私有”的内存,是线程安全的。    特点:1.线程私有 2.不会存在内存溢出 二、虚拟机栈(Java Virtual Machine Stack)    虚拟机栈总是与线程关联在一起的, 每当创建一个线程,JVM就会为该线程创建对应的虚拟机栈 ,在这个 虚拟机栈中又会包含多个栈帧(Stack Frame) ,这些栈帧是与每个方法关联起来的, 每运行一个方法就创建一个栈帧 ,每个栈帧会含有一些局部变量、操作栈和方法返回值等信息。每当一个方法执行完成时,该栈帧就会弹出栈帧的元素作为这个方法的返回值,并且清除这个栈帧,

有状态和无状态的对象区别

荒凉一梦 提交于 2019-11-26 02:28:28
第一:基本概念: ** 1、有状态就是有数据存储功能。有状态对象(Stateful Bean),就是有实例变量的对象,可以保存数据,是非线程安全的。在不同方法调用间不保留任何状态。 2、无状态就是一次操作,不能保存数据。无状态对象(Stateless Bean),就是没有实例变量的对象.不能保存数据,是不变类,是线程安全的。 ** 第二:看看代加深影响: /** * 有状态bean,有state,user等属性,并且user有存偖功能,是可变的。 * * @author Peter Wei * */ public class StatefulBean { public int state; // 由于多线程环境下,user是引用对象,是非线程安全的 public User user; public int getState() { return state; } public void setState(int state) { this.state = state; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } } /** * 无状态bean,不能存偖数据。因为没有任何属性,所以是不可变的。只有一系统的方法操作。 * * @author

2019年Java面试题解析

落花浮王杯 提交于 2019-11-25 23:47:04
包含的模块: 本文分为十九个模块,分别是: Java 基础、容器、多线程、反射、对象拷贝、Java Web 、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、MyBatis、RabbitMQ、Kafka、Zookeeper、MySQL、Redis、JVM 如下图所示: 共包含 208 道面试题,本文的宗旨是为读者朋友们整理一份详实而又权威的面试清单,下面一起进入主题吧。 ==================================================================== 一. Java 基础模块 1.JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,Java 开发工具包,提供了 Java 的开发环境和运行环境。 JRE:Java Runtime Environment 的简称,Java 运行环境,为 Java 的运行提供了所需环境。 具体来说 JDK 其实包含了 JRE,同时还包含了编译 Java 源码的编译器 Javac,还包含了很多 Java 程序调试和分析的工具。简单来说:如果你需要运行 Java 程序,只需安装 JRE 就可以了,如果你需要编写 Java 程序,需要安装 JDK。 2.== 和 equals

16_多线程(续)

我怕爱的太早我们不能终老 提交于 2019-11-25 22:18:06
百知教育 - 孙帅 - 16_多线程(续) 14_深入比较ArrayList和Vector Collections工具类中提供了多个可以获得线程安全集合的方法(均以 synchronized 实现): public static < T > Collection synchronizedCollection (Collection c) public static < T > List< T > synchronizedList (List< T > list) public static < T > Set< T > synchronizedSet (Set< T > s) public static < K, V > Map< K, V > synchronizedMap (Map< K, V > m) public static < T > SortedSet< T > synchronizedSortedSet (SortedSet< T > s) public static < K, V > SortedMap< K, V > synchronizedSortedMap (SortedMap< K, V > m) 代码(编译通过): package day20 ; import java . util . ArrayList ; import java . util .