摘要:
计数信号量(Counting Semaphore)用来控制同时访问某个特定资源的操作数量,或者执行某个特定操作的数量。计数信号量还可以用来实现某种资源池或者对容器加边界。 Semaphore中管理着一组虚拟许可(permit),许可的初始数量可以通过在构造方法中指定。在执行操作时首先获取许可(per 阅读全文
摘要:
我们可以通过闭锁(CountDownLatch)来同时启动一组相关线程,或等待一组相关线程的结束。可是闭锁是一次性对象,一旦进入终止状态,就不能被重置。栅栏类似于闭锁,它能够阻塞一组线程直到某个事件发生。CyclicBarrier可以使一定数量的参与线程反复地在栅栏处汇集。... 阅读全文
摘要:
实现并发的最直接方式是在操作系统级别使用进程。进程是运行在自己的地址空间内的自包容程序。多任务操作系统可以通过周期性地将CPU从一个进程切换到另一个进程,来实现同时运行多个进程的。操作系统将进程相互隔离开,因此他们不会相互干扰,这使得通过进程实现并发编程相对容易一些。而JAVA的并发... 阅读全文
摘要:
排它锁(Exclusive Locks,简称X锁)又称之为独占锁,是一种基本的锁类型。排他锁的核心就是如何保证仅有一个线程获取到锁,并且在锁释放后,可以及时地通知到其他等待获取锁定的线程。下面使用ZK实现了一个简单的排它锁。 定义锁 在ZK下定义一个临时节点节点表示锁 /**排它锁节点**/ pri 阅读全文
摘要:
在Spring web项目中XmlWebApplicationContext是如何创建的?首先在web.xml中我们可以看到如下配置 contextConfigLocation classpath*:META-INF/spring/*.xml org.springfram... 阅读全文
摘要:
DispatcheServlet类图,我们根据其类图进行源码分析 GenericServlet 源码分析 /** * 定义一个通用的,协议无关的Servlet.如果需要编写一个在Web中使用的Http Severlet需要继承HttpServlet * GeneraicServle... 阅读全文
摘要:
上一节分析了ZooKeeper的部分代码,下面我们看看客户端网络连接器的部分代码 /** 这个类管理客户端的socket I/O。ClientCnxn维护一个可用服务器列表可以根据需要透明地切换服务器 * */ public class ClientCnxn { private static fin 阅读全文
摘要:
为了更好地了解ZooKeeper客户端的工作原理,首先需要从客户端的会话创建过程学起。 初始化阶段: 初始化ZooKeeper对象 通过调用ZooKeeper的构造方法实例化一个ZooKeeper对象,在初始化过程中会创建一个客户端Watcher管理器ClientWatcherManager 设置会 阅读全文
摘要:
/** *通过注解方式MBean导出器,继承MBeanExporter */public class AnnotationMBeanExporter extends MBeanExporter { private final AnnotationJmxAttributeSource ... 阅读全文
摘要:
Spring集成JMX是很简单的,这里通过注解发方式暴露JMX,有的时序我们需要监听JMX属性的改变,下面我们在Spring配置文件中配置监听器。 涉及到三个重要的annotation:@ManagedResource @ManagedAttribute 和 @ManagedOperati... 阅读全文