摘要: 今天我们来探讨一下Java中的锁机制。前面我们提到,在JDK1.5之前只能通过synchronized关键字来实现同步,这个前面我们已经提到是属于独占锁,性能并不高,因此JDK1.5之后开始借助JNI实现了一套高效的锁实现! JDK5以后锁的接口是JUC中的Lock,我们来先看一下他的相关API文档 阅读全文
posted @ 2016-02-23 22:41 人生设计师 阅读(2078) 评论(0) 推荐(0)
摘要: 在JDK1.5之前。Java主要靠synchronized这个关键字保证同步,已解决多线程下的线程不安全问题,但是这会导致锁的发生,会引发一些个性能问题。 锁主要存在一下问题 (1)在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。 (2)一个线程持有锁会导致其它所有需要 阅读全文
posted @ 2016-02-23 22:37 人生设计师 阅读(6472) 评论(1) 推荐(0)
摘要: 前面大致提到了JDK中的一些个原子类,也提到原子类是并发的基础,更提到所谓的线程安全,其实这些类或者并发包中的这么一些类,都是为了保证系统在运行时是线程安全的,那到底怎么样才算是线程安全呢? Java并发与实践一书中提出,当多个线程同时访问一个类的时候,如果不用考虑这些线程在运行时环境下的调度和交替 阅读全文
posted @ 2016-02-23 22:36 人生设计师 阅读(9048) 评论(0) 推荐(0)
摘要: 我们知道,JDK1.5以后引入了并发包(java.util.concurrent)用于解决多CPU时代的并发问题,而并发包中的类大部分是基于Queue的并发类,Queue在大多数情况下使用了原子类(Atomic)操作,因此要了解Concurrent包首先要了解Atomic类。 在很多时候,我们需要的 阅读全文
posted @ 2016-02-23 22:30 人生设计师 阅读(1409) 评论(0) 推荐(0)
摘要: 9、Semaphore Semaphore是并发包中用于控制某个资源访问个数的类,例如数据库的连接池,我们用代码来演示一下一个连接池的实现: package com.yhj.container.concurrent; import java.util.ArrayList; import java.u 阅读全文
posted @ 2016-02-23 22:18 人生设计师 阅读(877) 评论(0) 推荐(0)
摘要: 6、ThredPoolExecutor ThredPoolExecutor是基于命令模式下的一个典型的线程池的实现,主要通过一些策略实现一个典型的线程池,目前已知的策略有ThreadPoolExecutor.AbortPolicy, ThreadPoolExecutor.CallerRunsPoli 阅读全文
posted @ 2016-02-23 22:12 人生设计师 阅读(1053) 评论(0) 推荐(0)
摘要: 从JDK1.5以后,Java为我们引入了一个并发包,用于解决实际开发中经常用到的并发问题,那我们今天就来简单看一下相关的一些常见类的使用情况。 1、ConcurrentHashMap ConcurrentHashMap其实就是线程安全版本的hashMap。前面我们知道HashMap是以链表的形式存放 阅读全文
posted @ 2016-02-23 21:28 人生设计师 阅读(8786) 评论(2) 推荐(0)