线程安全
文章平均质量分 82
txxs
这个作者很懒,什么都没留下…
展开
-
HashMap为什么是线程不安全的?
一直以来只是知道HashMap是线程不安全的,但是到底HashMap为什么线程不安全,多线程并发的时候在什么情况下可能出现问题?HashMap底层是一个Entry数组,当发生hash冲突的时候,hashmap是采用链表的方式来解决的,在对应的数组位置存放链表的头结点。对链表而言,新加入的节点会从头结点加入。javadoc中关于hashmap的一段描述如下:此实现不是同步的。如果多个转载 2015-06-23 00:33:54 · 547 阅读 · 0 评论 -
synchronized和java.util.concurrent.locks.Lock的区别
在看ConcurrentHashMap 源码的时候看到lock这个锁机制,不明白它和Synchronized的区别,查了一些资料记录下来,在Lock的文档中,对Lock的解释是:Lock实现比synchronized 提供了更多额外的锁操作,它有更灵活的结构,可以支持不同的属性,可以支持多个相关条件的对象。那下边看一下Lock可以提供哪些比synchronized 额外的操作,也就是解决synch原创 2015-06-27 15:29:50 · 1371 阅读 · 0 评论 -
ConcurrentHashMap高并发性的实现原理
ConcurrentHashMap是Java5中新增加的一个线程安全的Map集合,可以用来替代HashTable。HashTable容器在竞争激烈的并发环境下表现出效率低下的原因是所有访问HashTable的线程都必须竞争同一把锁,那假如容器里有多把锁,每一把锁用于锁容器其中一部分数据,那么当多线程访问容器里不同数据段的数据时,线程间就不会存在锁竞争,从而可以有效的提高并发访问效率,这就是Conc...原创 2015-06-27 20:39:01 · 10628 阅读 · 2 评论 -
java concurrent并发详解
我们都知道,在JDK1.5之前,Java中要进行业务并发时,通常需要有程序员独立完成代码实现,当然也有一些开源的框架提供了这些功能,但是这些依然没有JDK自带的功能使用起来方便。而当针对高质量Java多线程并发程序设计时,为防止死蹦等现象的出现,比如使用java之前的wait()、notify()和synchronized等,每每需要考虑性能、死锁、公平性、资源管理以及如何避免线程安全性方面带来的转载 2015-07-31 21:27:35 · 787 阅读 · 0 评论 -
简单缓存的实现
import java.util.Map;import java.util.WeakHashMap;import java.util.concurrent.ConcurrentHashMap;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock; public fin原创 2015-10-01 17:41:49 · 786 阅读 · 0 评论 -
提升Java性能的基本方法
一、不要再循环条件中计算//应该是int total = count*2while(i<total){}//而不是while(i<count*2){}二、尽可能把变量、方法声明为final static 类型在类加载后就会生成该数组,么次方法调用的时候就不用重新生成了三、缩小变量的作用范围方法能定义在方法内就放在方法内,能放在循环体内就放在循环体内,能放在一个tr原创 2016-05-05 12:52:06 · 403 阅读 · 0 评论 -
Synchronized和ThreadLocal的区别
关于理论知识,以下这两个文章讲的很好:Spring单例与线程安全小结ThreadLocal的原理和在框架中的应用不多说,上代码,自己运行一下就知道区别了package com.spri.test;public class SequenceNumber { public Object obj = new Object(); // ①通过匿名内部类覆盖T原创 2016-08-09 11:29:46 · 1631 阅读 · 0 评论 -
Java中sleep和wait的区别
sleep要放在trycatch中,wait要放入循环中,wait是Object类中定义的方法”。Thread.sleep不会导致锁行为的改变,如果当前线程是拥有锁的,那么Thread.sleep不会让线程释放锁。Thread.sleep和Object.wait都会暂停当前的线程,对于CPU资源来说,不管是哪种方式暂停的线程,都表示它暂时不再需要CPU的执行时间。OS会将执行时间分原创 2016-08-09 15:54:33 · 458 阅读 · 0 评论 -
一个简单死锁的例子
转自:http://www.open-open.com/code/view/1426489433101package com.spri.test;/** * 在实际编程中,要尽量避免出现死锁的情况,但是让你故意写一个死锁的程序时似乎也不太简单(有公司会出这样的面试题),* 以下是一个简单的死锁例子。* 线程的同步化可能会造成死锁,死锁发生在两个线程相互持有对方正在等待的东西原创 2016-08-09 20:11:36 · 4038 阅读 · 0 评论