从java的集合线程安全开始说起
平时经常使用的集合类如ArrayList,LinkedList,HashSet等以及Map都是线程不安全的,如果进行多线程操作会出现线程安全问题,那么java是如何解决这些常用类的线程安全问题呢
几个常用的保证集合类线程安全的方法
使用synchronized关键字
使用Collections提供的工具方法保证线程……继续阅读 »
cruise
2年前 (2019-05-27) 722浏览 0评论
0个赞
什么是CAS
compareAndSwap 对比并交换,是一条CPU原语,执行必须是连续的不能够被打断。Atomic类使用CAS原理实现
java语言中利用,sun.misc.Unsafe类实现了CAS
java8中里有do…while循环实现了CAS
public final int getAndSetInt(Object paramOb……继续阅读 »
cruise
2年前 (2019-05-20) 686浏览 0评论
0个赞
从阻塞队列开始说起
在操作阻塞队列时,如果队列内容为空,那么消费线程会被阻塞;如果队列已经满了,那么生产线程将会阻塞
阻塞队列的分类
ArrayBlockingQueue
有界队列
底层为Array形式存储
如果所有的任务都是按顺序执行,不存在“插队”和从队伍中离开,则适合使用ArrayBlockingQueue
LinkedBlockingQu……继续阅读 »
cruise
2年前 (2019-05-18) 812浏览 0评论
1个赞
在java的内存模型中,每个线程都要将主内存中的变量复制到线程的工作内存中,在线程操作完成后将工作内存中的变量写会到主内存中。如果一个变脸被复制到线程的工作空间中,在线程工作空间中的修改,如果不能及时写回主内存中,那么其他线程是无法获取大这个变量已被修改的状态。
java引入volatile关键字来实现指令在读取变量时,必须去读主内存中的变量,而不将变量复制……继续阅读 »
cruise
2年前 (2019-05-02) 619浏览 0评论
0个赞
要不断打磨,技术才会不断进步
之前写过单例模式的几种实现方式,原文链接http://www.full-stacker.com/archives/256
之前犯了个严重的错误,一直以为双重判断方式的实现是线程安全的,但真实却不是这样的。。。。
先看下双重判断方式的实现代码:
package com.fullstacker.study.designpattern……继续阅读 »
cruise
2年前 (2019-05-02) 614浏览 0评论
0个赞