摘要: AbstractQueuedSynchronizer,简称AQS,是JUC中Lock机制的实现的前提,大部分锁的实现都是以这个为基础的。看下这个类的注释: 1 /** 2 * Wait queue node class. 3 * 4 * <p>The wait queue is a variant of a "CLH" (Crai哦, Landin, and 5 * Hagersten) lock queue. CLH locks are normally used for 6 * spinlocks. We instead use them... 阅读全文
posted @ 2012-11-08 20:23 flying_wind 阅读(599) 评论(0) 推荐(0) 编辑
摘要: 传统的进程间通信的方式有大致如下几种:(1) 管道(PIPE)(2) 命名管道(FIFO)(3) 信号量(Semphore)(4) 消息队列(MessageQueue)(5) 共享内存(SharedMemory)(6) SocketJava如何支持进程间通信。我们把Java进程理解为JVM进程。很明显,传统的这些大部分技术是无法被我们的应用程序利用了(这些进程间通信都是靠系统调用来实现的)。但是Java也有很多方法可以进行进程间通信的。除了上面提到的Socket之外,当然首选的IPC可以使用Rmi,或者Corba也可以。另外Java nio的MappedByteBuffer也可以通过内存映射文 阅读全文
posted @ 2012-10-24 15:08 flying_wind 阅读(16526) 评论(0) 推荐(0) 编辑
摘要: 在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁。锁机制存在以下问题:(1)在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。(2)一个线程持有锁会导致其它所有需要此锁的线程挂起。(3)如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能风险。volatile是不错的机制,但是volatile不能保证原子性。因此对于同步最终还是要回到锁机制上来。独占锁是一种悲观锁,synchronized就是一种独占锁,会导致其它所有需要锁的线程挂起,等待持有锁的线程释放锁。而另一个更加有效的锁就是乐观锁。所谓乐观锁就是 阅读全文
posted @ 2012-08-13 16:24 flying_wind 阅读(340) 评论(0) 推荐(0) 编辑
摘要: volatile相当于synchronized的弱实现,也就是说volatile实现了类似synchronized的语义,却又没有锁机制。它确保对volatile字段的更新以可预见的方式告知其他的线程。volatile包含以下语义:(1)Java 存储模型不会对valatile指令的操作进行重排序:这个保证对volatile变量的操作时按照指令的出现顺序执行的。(2)volatile变量不会被缓存在寄存器中(只有拥有线程可见)或者其他对CPU不可见的地方,每次总是从主存中读取volatile变量的结果。也就是说对于volatile变量的修改,其它线程总是可见的,并且不是使用自己线程栈内部的变量 阅读全文
posted @ 2012-08-13 16:01 flying_wind 阅读(265) 评论(0) 推荐(0) 编辑
摘要: 前一篇文章分析了netty的服务端流程,接下来分析一下客户端的大致流程,客户端启动代码如下ClientBootstrap bootstrap = new ClientBootstrap(new NioClientSocketChannelFactory(Executors.newCachedThreadPool(), Executors.newCachedThreadPool())); bootstrap.setPipelineFactory(new ChannelPipelineFactory() { @Override ... 阅读全文
posted @ 2012-06-28 15:18 flying_wind 阅读(2177) 评论(1) 推荐(0) 编辑
摘要: 今天看了下netty代码,对代码做了个流程分析,netty的代码写的真是漂亮。netty服务端启动代码如下ServerBootstrap bootstrap = new ServerBootstrap(new NioServerSocketChannelFactory(Executors.newCachedThreadPool(), Executors.newCachedThreadPool())); bootstrap.setPipelineFactory(new ChannelPipelineFactory() { @Ove... 阅读全文
posted @ 2012-06-28 15:06 flying_wind 阅读(1886) 评论(0) 推荐(0) 编辑