- 浏览: 249755 次
- 性别:
- 来自: 济南
文章分类
- 全部博客 (303)
- c (31)
- c++ (16)
- java (18)
- c# (1)
- python (3)
- java web (6)
- oracle (7)
- sqlserver (2)
- mysql (2)
- android (24)
- android系统 (15)
- android多媒体部分 (15)
- android游戏 (12)
- linux (26)
- javaScript (1)
- ajax (1)
- node JS (2)
- html (5)
- apache (3)
- jboss (1)
- weblogic (0)
- 通信协议 (10)
- 云计算 (1)
- 分布式 (5)
- ejb (1)
- webservice (5)
- 设计模式 (16)
- JNI (6)
- swing (13)
- 版本控制 (1)
- UML (1)
- xml (4)
- spring (5)
- hibernate (5)
- struts1 (3)
- struts2 (4)
- ibatis (0)
- tomcat (2)
- 心得体会 (1)
- css (1)
- 嵌入式 (41)
- arm体系结构 (10)
Synchronized是lock的一种简化实现,一个lock可以应对多个condition
而synchronized把lock和condiiton合并了,一个synchronizedLock
只对应一个condition在jdk中他们的效率差不多
注:不要在lock和condition上使用waitnotifynotifyAll方法
使用AtomicInteger
classCounter{
privatevolatileintcount=0;
//若要线程安全执行count++,需要加锁
publicsynchronizedvoidincrement(){
count++;
}
publicintgetCount(){
returncount;
}
}
classCounter2{
privateAtomicIntegercount=newAtomicInteger();
//使用AtomicInteger后,不需要加锁,也可以实现线安全
publicvoidincrement(){
count.incrementAndGet();
}
publicintgetCount(){
returncount.get();
}
}
这是硬件提供原子操作指令实现的,其他的原子操作还有
AtomicBooleanAtomicLong AtomicReference<T>
使用Lock-Free算法
classCounter{
privatevolatileintmax=0;
//若要线程安全执行count++,需要加锁
publicsynchronizedvoidset(intvalue){
if(value>max){
max=value;
}
}
publicintgetMax(){
returnmax;
}
}
classCounter2{
privateAtomicIntegermax=newAtomicInteger();
//使用AtomicInteger后,不需要加锁,也可以实现线安全
publicvoidset(intvalue){
for(;;){
intcurrent=max.get();
if(value>current){
if(max.compareAndSet(current,value)){
break;
}else{
continue;
}
}else{
break;
}
}
}
publicintgetCount(){
returnmax.get();
}
}
Lock-Free的数据结构
classBeanManager{
privateMap<String,Object>map=newHashMap<String,Object>();
publicObjectgetBeans(Stringkey){
synchronized(map){
Objectbean=map.get(key);
if(bean==null){
map.put(key,createBean());
bean=map.get(key);
}
returnbean;
}
}
}
classBeanManager2{
privateConcurrentMap<String,Object>map=newConcurrentHashMap<String,Object>();
publicObjectgetBeans(Stringkey){
Objectbean=map.get(key);
if(bean==null){
map.putIfAbsent(key,createBean());
bean=map.get(key);
}
returnbean;
}
}
发表评论
-
thread local 学习笔记
2012-11-08 15:45 595thread local(thread 的局部变量)解决多 ... -
mina 学习笔记一
2012-11-05 16:33 593mina下载路径 http://mina.apache.or ... -
多线程学习笔记一
2012-09-04 11:03 627/** * 子线程循环10次,主线程100次 如此 ... -
多线程学习笔记二
2012-09-04 11:05 599/** * 传统线程 * * @time 下午06:15 ... -
多线程学习笔记三
2012-09-04 11:06 581/** * 两个线程进行数据交换 * * @time 上 ... -
多线程学习笔记四
2012-09-04 11:08 627/** * 线程范围内的数据共享 * * 应用场景:减少 ... -
java swing 学习笔记一(画板Panel )
2012-09-04 11:18 1016/** * 画板 * * @time 3:38:10 P ... -
java swing学习笔记二(画布Canvas)
2012-09-04 11:19 3197/** * 画布 * @time 11:23:53 AM ... -
java IO流学习笔记一
2012-09-08 17:10 449IO 两大主流 16位和8位 16位对应writer和rea ... -
java 类装载器
2012-09-08 18:12 655public class ClassLoaderTest { ... -
并发库学习笔记一
2012-09-28 16:37 611新建线程并启动的几种 ... -
并发库学习笔记二
2012-09-28 16:38 430阻塞队列(生产者和消费者开发模式) 三种常用的阻塞队 Ar ... -
并发库学习笔记四
2012-09-28 16:42 634ConcurrentHashMap并没有实现Lock-Free ... -
并发库学习笔记五
2012-09-28 16:43 693并发流程控制CountDown ... -
java IO流学习笔记二
2012-10-03 00:24 592/** * * * 目录分隔符用\\或/ * * @ ... -
jdk5.0的特性
2012-10-03 00:28 6041静态导入 导入指定类 ... -
java IO流学习笔记三
2012-10-04 23:39 668转换流 inputStreamReader 字节转字符 o ...
相关推荐
java并发库学习笔记
TBB 并发容器 concurrent_queue concurrent_vector concurrent_hash_map TBB 并发容器 concurrent_queue concurrent_vector concurrent_hash_map TBB 并发容器 concurrent_queue concurrent_vector concurrent_hash_...
NULL 博文链接:https://itway.iteye.com/blog/1539359
张孝祥Java多线程与并发库高级应用学习笔记,很经典的学习多线程和并发的资料。张孝祥Java多线程讲义笔记由张孝祥亲自整理,很实用的。
Java秒杀系统方案优化高性能高并发学习实战源代码以及笔记..zip 章节笔记 第1章-课程介绍及项目框架搭建 知识点 使用spring boot 搭建项目基础框架 使用Thymeleaf做页面展示,封装Result统一结果 集成 mybatis + ...
CLR:公共语言运行库。 15.什么是装箱和拆箱? 答:从值类型接口转换到引用类型装箱。从引用类型转换到值类型拆箱。 16.什么是受管制的代码? 答:unsafe:非托管代码。不经过CLR运行。 17.什么是强类型系统? ...
广泛的开源生态:Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。 完善的 SPI 扩展点:Sentinel...
标准库丰富:Java拥有庞大的类库,如Java SE(Java Standard Edition)包含基础API,用于开发通用应用程序;Java EE(Java Enterprise Edition)提供企业级服务,如Web服务、EJB等;而Java ME(Java Micro Edition...
c#学习笔记(1) 51099在线学习网发布 文章来源:网络收集 发布时间:2006-05-25 字体: [大 中 小] 51099在线学习网 http://www.51099.com 1, 结构(struct) 与 类(class) [attributes] [modifiers] struct ...
协程库state threads library(以下简称st)是一个基于setjmp/longjmp实现的C语言版用户线程库或协程库(user level ...srs流媒体服务器就是基于协程库开发的,这就是它实现高并发的原因。 希望能对初学者有所帮助。
go语言学习笔记 该仓库记录的go语言学习笔记 一go语言基础 go语言特点: 运行效率高,且简单易学 跨平台 丰富的标准库 可以直接使用c代码 语言规范支持并发 本节主要内容如下 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9...
Guava学习笔记笔记的大部分中文翻译内容来源于以下译者: 沉义扬,罗立树,何一昕,武祖校对:方腾飞感谢给我们带来的这一系列好文章。引言Guava工程包含了若干被Google的Java项目广泛依赖的核心库,例如:集合...
本仓库是笔者在学习过程中的知识总结,内容以Java后端的知识总结为主。 【个人博客】 Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ 算法 操作系统 网络 数据库 Java JavaWeb 分布式 设计模式 算法 :pencil: 操作系统 :laptop: 网络 :...
这个项目旨在让学习者可以快速掌握分布式系统设计的技巧,尤其适合对高并发、分布式感兴趣的同学学习。如果想深入理解和应用分布式系统的设计原则,这个项目将会是一个很好的学习资源。 再以购票服务为例,当用户...
Java 的学习笔记和整理的知识点,包含Java语言基础、Java服务端方向的框架、设计模式、计算机网络、算法、Java 虚拟机和数据库等多个方面的内容。想了解前端的内容参考,Android相关的内容参考。 目录结构 语言基础...
标准库丰富:Java拥有庞大的类库,如Java SE(Java Standard Edition)包含基础API,用于开发通用应用程序;Java EE(Java Enterprise Edition)提供企业级服务,如Web服务、EJB等;而Java ME(Java Micro Edition...
关于并发与并行 关于协程 关于goroutine 使用 单个 多个 池 同步 介绍 互斥锁 读写锁 原子操作 执行 可增长的栈 goroutine调度 GOMAXPROCS 回收 sync.WaitGroup sync.Once sync.Map 泄露 ...
主要内容包括数据库建模、关系模型和关系运算、数据库语言SQL(包括最新标准 SQL2和SQL3)及其系统环境、关系数据库设计理论及数据库设计、面向对象的对象定义语言和对象查询语言、以及查询优化和并发控制。...
高级java笔试题 awesome-learning Github repository ...记录各种学习笔记(算法、Java、数据库、并发......) Design patterns implemented 进阶/博客/笔记 很全面的学习笔记,偏向 Android 和 Java To