xylz,imxylz

关注后端架构、中间件、分布式和并发编程

   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  111 随笔 :: 10 文章 :: 2680 评论 :: 0 Trackbacks

#

     摘要: 在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁(后面的章节还会谈到锁)。
锁机制存在以下问题:
(1)在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。
(2)一个线程持有锁会导致其它所有需要此锁的线程挂起。
(3)如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能风险。
volatile是不错的机制,但是volatile不能保证原子性。因此对于同步最终还是要回到锁机制上来。
独占锁是一种悲观锁,synchronized就是一种独占锁,会导致其它所有需要锁的线程挂起,等待持有锁的线程释放锁。而另一个更加有效的锁就是乐观锁。所谓乐观锁就是,每次不加锁而是假设没有冲突而去完成某项操作,如果因为冲突失败就重试,直到成功为止。  阅读全文
posted @ 2010-07-04 18:03 imxylz 阅读(47900) | 评论 (19)编辑 收藏

     摘要: 在这个小结里面重点讨论原子操作的原理和设计思想。
由于在下一个章节中会谈到锁机制,因此此小节中会适当引入锁的概念。
在Java Concurrency in Practice中是这样定义线程安全的:
当多个线程访问一个类时,如果不用考虑这些线程在运行时环境下的调度和交替运行,并且不需要额外的同步及在调用方代码不必做其他的协调,这个类的行为仍然是正确的,那么这个类就是线程安全的。  阅读全文
posted @ 2010-07-03 20:40 imxylz 阅读(46435) | 评论 (16)编辑 收藏

     摘要: 在这一部分开始讨论数组原子操作和一些其他的原子操作。
AtomicIntegerArray/AtomicLongArray/AtomicReferenceArray的API类似,选择有代表性的AtomicIntegerArray来描述这些问题。
int get(int i)
获取位置 i 的当前值。很显然,由于这个是数组操作,就有索引越界的问题(IndexOutOfBoundsException异常)。

对于下面的API起始和AtomicInteger是类似的,这种通过方法、参数的名称就能够得到函数意义的写法是非常值得称赞的。在《重构:改善既有代码的设计》和《代码整洁之道》中都非常推崇这种做法。  阅读全文
posted @ 2010-07-02 14:19 imxylz 阅读(48035) | 评论 (6)编辑 收藏

     摘要: 从相对简单的Atomic入手(java.util.concurrent是基于Queue的并发包,而Queue,很多情况下使用到了Atomic操作,因此首先从这里开始)。很多情况下我们只是需要一个简单的、高效的、线程安全的递增递减方案。注意,这里有三个条件:简单,意味着程序员尽可能少的操作底层或者实现起来要比较容易;高效意味着耗用资源要少,程序处理速度要快;线程安全也非常重要,这个在多线程下能保证数据的正确性。这三个条件看起来比较简单,但是实现起来却难以令人满意。
通常情况下,在Java里面,++i或者--i不是线程安全的,这里面有三个独立的操作:或者变量当前值,为该值+1/-1,然后写回新的值。在没有额外资源可以利用的情况下,只能使用加锁才能保证读-改-写这三个操作时“原子性”的。  阅读全文
posted @ 2010-07-01 15:21 imxylz 阅读(65679) | 评论 (2)编辑 收藏

     摘要: 去年年底有一个Guice的研究计划,可惜由于工作“繁忙”加上实际工作中没有用上导致“无疾而终”,最终只是完成了Guice的初步学习教程,深入的研究没有继续进行下去。
最近一直用的比较多的就是java.util.concurrent(J.U.C),实际上这块一直也没有完全深入研究,这次准备花点时间研究下Java里面整个并发体系。初步的设想包括比较大的方便(包括硬件、软件、思想以及误区等等),因此可能会持续较长的时间。这块内容也是Java在多线程方面引以为豪的一部分,深入这一部分不仅对整个Java体系有更深的了解,也对工作、学习的态度有多帮助。  阅读全文
posted @ 2010-06-30 18:09 imxylz 阅读(69050) | 评论 (8)编辑 收藏

posted @ 2010-06-23 10:46 imxylz 阅读(18551) | 评论 (0)编辑 收藏

posted @ 2010-01-31 00:00 imxylz 阅读(19865) | 评论 (0)编辑 收藏

posted @ 2010-01-29 16:09 imxylz 阅读(24071) | 评论 (2)编辑 收藏

posted @ 2010-01-29 16:05 imxylz 阅读(21860) | 评论 (0)编辑 收藏

     摘要: 在前面的教程中我们讲了Guice注入例子,在使用上具体描述了Guice的注入过程。在下面的篇幅中我们从源码级了解了Guice的注入过程。
我们从具体到抽象再到具体的深入了解Guice的内部运作机制 。
下面一张序列图就是描述了Guice最简单的一次注入过程。比如下面的例子是我们熟悉的。  阅读全文
posted @ 2010-01-08 11:46 imxylz 阅读(28038) | 评论 (6)编辑 收藏

posted @ 2010-01-04 23:45 imxylz 阅读(29183) | 评论 (0)编辑 收藏

     摘要: 以前有段时间需要知道某些类在什么jar包中,这样当出现ClassNotFoundException或者NoClassDefFoundError的时候我们就可以去找这个类在什么jar包中然后去引用此jar包即可。在我们的系统很小的时候我恨不能都将jar包放入eclipse中,这样借助 eclipse平台查找类就非常方便了。包括非常有用的Ctrl+Shift+T,Ctrl+T,Reference search等等,但是当工程多了大了的时候,上百个jar包放入eclipse中那个速度完全不是我能忍受的,稍微动一下就看到CPU一直在那抖动。好吧,用maven,更慢,简直受不了,所以大多数时候Maven是一个比较好的批处理工具,和UI结合起来还不是很好用。

我发现我非常需要这个从jar包中寻找类的功能,我只需要看看我的类在什么地方而已,仅次而已!于是自己就写了一个类查找器。非常简单就是遍历所有的jar包中的类,当匹配类名称的时候就显示类所在的jar包。
有以下几个特性:

* 允许添加jar包,zip包
* 允许匹  阅读全文
posted @ 2009-12-31 17:07 imxylz 阅读(20849) | 评论 (11)编辑 收藏

     摘要: 本章节继续讨论Google Guice与第三方的整合,这里主要讨论如何整合JMX的服务,通过guice-jmx插件我们可以很方便的将我们的服务注入到JMX服务中,这样就能够通过远程调用来控制我们的服务。  阅读全文
posted @ 2009-12-31 15:35 imxylz 阅读(19816) | 评论 (3)编辑 收藏

     摘要: Google Guice 整合第三方组件。

在《Google Guice 入门教程06 – Web 和Servlet》 中我们看到了Guice 整合Struts 2的应用。本章节继续讨论Guice整合其它第三方组件的应用。

本章节重点谈Guice与DWR和Spring的整合。
  阅读全文
posted @ 2009-12-29 00:11 imxylz 阅读(27315) | 评论 (5)编辑 收藏

     摘要: 本章节主要讲Guice中如何开发Servlet,当然了作为IOC的容器,Guice在这方面仍然局限于依赖注入功能。作为WEB方面的开发就不能不提Struts,这里着重谈如何与Struts 2进行整合。  阅读全文
posted @ 2009-12-27 22:58 imxylz 阅读(16752) | 评论 (1)编辑 收藏

     摘要: 本章节主要讨论Guice中AOP的使用,其中花了一些篇幅谈AOP的概念,然后通过一些API和例子来说明AOP的具体使用过程。  阅读全文
posted @ 2009-12-27 00:16 imxylz 阅读(17728) | 评论 (2)编辑 收藏

     摘要: 本章节继续讨论依赖注入的其他话题,包括作用域(scope,这里有一个与线程绑定的作用域例子)、立即初始化(Eagerly Loading Bindings)、运行阶段(Stage)、选项注入(Optional Injection)等等。   阅读全文
posted @ 2009-12-25 18:02 imxylz 阅读(16583) | 评论 (1)编辑 收藏

     摘要: 本章节继续讨论依赖注入的一些其它话题,包括多接口的实现、Provider的使用、绑定常量和绑定Properties等。  阅读全文
posted @ 2009-12-24 19:13 imxylz 阅读(18604) | 评论 (1)编辑 收藏

     摘要: 本文主要讨论Google Guice三种属性注入的方式,包括基本属性注入、构造函数注入和Setter注入等。  阅读全文
posted @ 2009-12-23 23:45 imxylz 阅读(20401) | 评论 (3)编辑 收藏

     摘要: 在我们64位的CenterOS上,指定了JVM的最大堆内存为5500M,但是在top和进程status中可以看到实际占用内存已经远远大于5500M,那么JVM到底占用多大内存?如果做到控制JVM的占用内存大小?  阅读全文
posted @ 2009-12-23 19:51 imxylz 阅读(3527) | 评论 (1)编辑 收藏

     摘要: 基于Google Guice 2.0的入门教程,本章节主要讲类的依赖注入,也就是IOC容器的核心组件。  阅读全文
posted @ 2009-12-22 23:28 imxylz 阅读(35617) | 评论 (5)编辑 收藏

     摘要: 本文将探讨单例模式的各种情况,并给出相应的建议。
单例模式应该是设计模式中比较简单的一个,但是在多线程并发的环境下使用却是不那么简单了。
本文将探讨在多线程下静态域单例模式、双重检查锁机制、类延时加载、同步锁等机制的相关技术问题。  阅读全文
posted @ 2009-12-18 23:15 imxylz 阅读(7319) | 评论 (4)编辑 收藏

     摘要: 大家都知道HashMap不是线程安全的,但是大家的理解可能都不是十分准确。很显然读写同一个key会导致不一致大家都能理解,但是如果读写一个总是存在HashMap中且不变的对象会有问题么?我们来试试看。  阅读全文
posted @ 2009-12-18 18:20 imxylz 阅读(6103) | 评论 (2)编辑 收藏

posted @ 2009-11-14 22:25 imxylz 阅读(617) | 评论 (0)编辑 收藏

posted @ 2009-11-13 23:31 imxylz 阅读(556) | 评论 (0)编辑 收藏

posted @ 2009-09-27 16:51 imxylz 阅读(1318) | 评论 (1)编辑 收藏

posted @ 2009-07-29 22:04 imxylz 阅读(3245) | 评论 (4)编辑 收藏

列出全部内容
共3页: 上一页 1 2 3 

©2009-2014 IMXYLZ