线程安全

14个Java并发容器,你用过几个?

让人想犯罪 __ 提交于 2019-12-01 09:43:58
不考虑多线程并发的情况下,容器类一般使用 ArrayList、HashMap 等线程不安全的类,效率更高。在并发场景下,常会用到 ConcurrentHashMap、ArrayBlockingQueue 等线程安全的容器类,虽然牺牲了一些效率,但却得到了安全。 上面提到的线程安全容器都在 java.util.concurrent 包下,这个包下并发容器不少,今天全部翻出来鼓捣一下。 仅做简单介绍,后续再分别深入探索。 ConcurrentHashMap:并发版 HashMap CopyOnWriteArrayList:并发版 ArrayList CopyOnWriteArraySet:并发 Set ConcurrentLinkedQueue:并发队列 (基于链表) ConcurrentLinkedDeque:并发队列 (基于双向链表) ConcurrentSkipListMap:基于跳表的并发 Map ConcurrentSkipListSet:基于跳表的并发 Set ArrayBlockingQueue:阻塞队列 (基于数组) LinkedBlockingQueue:阻塞队列 (基于链表) LinkedBlockingDeque:阻塞队列 (基于双向链表) PriorityBlockingQueue:线程安全的优先队列 SynchronousQueue:读写成对的队列

JAVA面经整理

佐手、 提交于 2019-12-01 07:53:37
一、Java SE ❤1、Java基础 1、一个十进制的数在内存中是怎么存的? Java支持的数据类型有哪些?什么是自动拆装箱? int 和 Integer 有什么区别 ? 什么时候使用int 什么时候使用Integer? 2、==比较的是什么? 3、hashCode()和equals()方法有什么联系? 为什么重写equals还要重写hashcode? Object若不重写hashCode()的话,hashCode()如何计算出来的?若对一个类不重写,它的equals()方法是如何比较的? 4、一个十进制的数在内存中是怎么存的? 5、Java语言中float和double数据类型的精度是多少?它们在内存中是怎么存储的?和Decimal有什么区别? 6、为啥有时会出现4.0-3.6=0.40000001这种现象? 7、不借助四则运算如何实现加法 8、char可以存汉字吗,底层怎么存的 9、Java的字符集是什么 10、什么是值传递和引用传递? 11、数组(Array)和列表(ArrayList)有什么区别?什么时候应该使用Array而不是ArrayList? 12、StringBuilder 和StringBuffer的区别 ? 底层实现上呢? 13、String为什么要设置成final类型?String是不变的吗?String为什么不可变?怎么实现不变的? 14、&和&&的区别?

设计模式

与世无争的帅哥 提交于 2019-12-01 04:34:17
设计模式分类 创建型模式: 单例模式、工厂模式、抽象工程模式、建造者模式、原型模式 结构型模式 适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式 行为型模式 模板方法模式、命令模式、迭代器模式、观察者模式、终结者模式、备忘录模式、揭示其模式、状态模式、策略模式、职责链模式、访问者模式 单例模式 核心作用 保证一个类只有一个实例,并且提供一个访问该实力的全局访问点 创建场景 Windows的任务管理器 Windows的回收站 项目中读取配置文件的类 网站的计数器 应用程序的日志应用 数据库连接池 操作系统文件系统 Application(servlet编程中会涉及) Spring中,每个Bean默认是单例模式,Spring容器可以管理 servlet编程中,servlet也是单例 Spring MVC框架/struts1框架中,控制器对象也是单例 优点 由于单例模式只生成一个实例,减少了系统性能的开销,当一个对象的产生需要比较多的资源时,可以通过应用启动时直接产生一个实例对象,然后永久驻留内存的方式来解决 单例模式可以在系统设置全举办的访问点,优化环共享资源访问,例如可以设计一个单例类,负责所有数据表的映射处理 常见的5中单例模式实现方式 主要: 饿汉式(线程安全,调用效率高。但是,不能延时加载。) 懒汉式(线程安全,调用效率不高。但是,可以延时加载。) 其他:

什么是线程安全

╄→尐↘猪︶ㄣ 提交于 2019-12-01 03:46:49
【定义】:无论是在多线程还是在单线程下执行结果永远一致,就是线程安全的 【特点】: 不可变 例如String、Integer、Long这种类,都是final修饰的,任何线程都无法改变其值,除非新建,所以不可变对象可以直接在多线程环境下使用。 绝对线程安全 例如CopyOnWriteArrayList(ArrayList线程安全变体)、CopyOnWriteArraySet(java.util.AbstractSet的子类) 相对线程安全 例如Vector,其add、remove方法都是原子操作,如果有个线程正在遍历此 Vector,同时有个线程在操作此Vector,多数情况下都会出现ConcurrentModificationException,也就是fail-fast机制。 线程不安全 例如ArrayList、LinkedList、HashMap 来源: https://blog.csdn.net/Yeva__/article/details/102462904

分析一套源代码的代码规范和风格并讨论如何改进优化代码

谁说胖子不能爱 提交于 2019-12-01 02:08:11
---恢复内容开始--- 我的工程实践题目是 基于opengl的车载虚拟仪表软件开发 ,是一项校企合作的项目,在项目中以前做过的学长也向我们分享了以往做过的相关的项目的源代码,代码主要是由c语言写出,通过调用opengl的api接口规范来实现的图像旋转,拉伸,平移等操作,源代码如下 : #include "config.h" #include "main.h" #include "./lib/lib_opengl.h" #include "./font.h" #include "./resource.h" #ifdef DEBUG_LOCATION #undef DEBUG_LOCATION #endif #define DEBUG_LOCATION "MAIN" pthread_t taskTimer; extern void *threadTimer(void); #define SIZE_OF_BOX 150 int main(int argc, char* argv[]) { float rotate = 0; FT_ULong strW[10] = {0}; u32 delay = 0; InitGL(); initFont(); initResource(); loadImage(IDIMG_BG); enableGlStatus(); //多线程 //pthread

JDK8日期处理API(转)

点点圈 提交于 2019-12-01 01:54:37
转载地址: http://www.cnblogs.com/comeboo/p/5378922.html 转载地址: http://blog.csdn.net/hspingcc/article/details/73332526 java8引入了一套全新的时间日期API,本篇随笔将说明学习java8的这套API。 java。time包中的是类是不可变且线程安全的。新的时间及日期API位于java.time中,下面是一些关键类 ●Instant——它代表的是时间戳 ●LocalDate——不包含具体时间的日期,比如2014-01-14。它可以用来存储生日,周年纪念日,入职日期等。 ●LocalTime——它代表的是不含日期的时间 ●LocalDateTime——它包含了日期及时间,不过还是没有偏移信息或者说时区。 ●ZonedDateTime——这是一个包含时区的完整的日期时间,偏移量是以UTC/格林威治时间为基准的。 java8是如何处理时间及日期的 1、如何在java8中获取当天的日期 java8中有个叫LocalDate的类,能用来表示今天的日期。这个类与java.util.Date略有不同,因为它只包含日期,没有时间。 可以看到,他创建了今天的日期却不包含时间信息,并且格式化了日期。 2、如何在java8中获取当前的年月日

如何正确地写出单例模式

萝らか妹 提交于 2019-12-01 00:54:00
懒汉式,线程不安全 懒汉式,线程安全 双重检验锁 饿汉式 static final field 静态内部类 static nested class 枚举 Enum 总结 Read More 单例模式算是设计模式中最容易理解,也是最容易手写代码的模式了吧。但是其中的坑却不少,所以也常作为面试题来考。本文主要对几种单例写法的整理,并分析其优缺点。很多都是一些老生常谈的问题,但如果你不知道如何创建一个线程安全的单例,不知道什么是双检锁,那这篇文章可能会帮助到你。 懒汉式,线程不安全 当被问到要实现一个单例模式时,很多人的第一反应是写出如下的代码,包括教科书上也是这样教我们的。 public class Singleton { private static Singleton instance; private Singleton (){} public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } } 这段代码简单明了,而且使用了懒加载模式,但是却存在致命的问题。当有多个线程并行调用 getInstance() 的时候,就会创建多个实例。也就是说在多线程下不能正常工作。 懒汉式,线程安全 为了解决上面的问题

如何正确地写出单例模式

你说的曾经没有我的故事 提交于 2019-12-01 00:16:00
懒汉式,线程不安全 懒汉式,线程安全 双重检验锁 饿汉式 static final field 静态内部类 static nested class 枚举 Enum 总结 Read More 单例模式算是设计模式中最容易理解,也是最容易手写代码的模式了吧。但是其中的坑却不少,所以也常作为面试题来考。本文主要对几种单例写法的整理,并分析其优缺点。很多都是一些老生常谈的问题,但如果你不知道如何创建一个线程安全的单例,不知道什么是双检锁,那这篇文章可能会帮助到你。 懒汉式,线程不安全 当被问到要实现一个单例模式时,很多人的第一反应是写出如下的代码,包括教科书上也是这样教我们的。 public class Singleton { private static Singleton instance; private Singleton (){} public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } } 这段代码简单明了,而且使用了懒加载模式,但是却存在致命的问题。当有多个线程并行调用 getInstance() 的时候,就会创建多个实例。也就是说在多线程下不能正常工作。 懒汉式,线程安全 为了解决上面的问题

如何正确地写出单例模式

白昼怎懂夜的黑 提交于 2019-12-01 00:15:17
懒汉式,线程不安全 懒汉式,线程安全 双重检验锁 饿汉式 static final field 静态内部类 static nested class 枚举 Enum 总结 Read More 单例模式算是设计模式中最容易理解,也是最容易手写代码的模式了吧。但是其中的坑却不少,所以也常作为面试题来考。本文主要对几种单例写法的整理,并分析其优缺点。很多都是一些老生常谈的问题,但如果你不知道如何创建一个线程安全的单例,不知道什么是双检锁,那这篇文章可能会帮助到你。 懒汉式,线程不安全 当被问到要实现一个单例模式时,很多人的第一反应是写出如下的代码,包括教科书上也是这样教我们的。 public class Singleton { private static Singleton instance; private Singleton (){} public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } } 这段代码简单明了,而且使用了懒加载模式,但是却存在致命的问题。当有多个线程并行调用 getInstance() 的时候,就会创建多个实例。也就是说在多线程下不能正常工作。 懒汉式,线程安全 为了解决上面的问题

如何正确地写出单例模式

爱⌒轻易说出口 提交于 2019-12-01 00:05:49
懒汉式,线程不安全 懒汉式,线程安全 双重检验锁 饿汉式 static final field 静态内部类 static nested class 枚举 Enum 总结 Read More 单例模式算是设计模式中最容易理解,也是最容易手写代码的模式了吧。但是其中的坑却不少,所以也常作为面试题来考。本文主要对几种单例写法的整理,并分析其优缺点。很多都是一些老生常谈的问题,但如果你不知道如何创建一个线程安全的单例,不知道什么是双检锁,那这篇文章可能会帮助到你。 懒汉式,线程不安全 当被问到要实现一个单例模式时,很多人的第一反应是写出如下的代码,包括教科书上也是这样教我们的。 public class Singleton { private static Singleton instance; private Singleton (){} public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } } 这段代码简单明了,而且使用了懒加载模式,但是却存在致命的问题。当有多个线程并行调用 getInstance() 的时候,就会创建多个实例。也就是说在多线程下不能正常工作。 懒汉式,线程安全 为了解决上面的问题