ConcurrentHashMap 高并发性的实现机制

ConcurrentHashMap 是 Java concurrent 包的重要成员。本文将结合 Java 内存模型,来分析 ConcurrentHashMap 的 JDK 源代码。通过本文,读者将了解到 ConcurrentHashMap 高并发性的具体实现机制。这对于我们在实际应用中更加高效的使用它是很有帮助的。 简介 ConcurrentHashMap 是 util.concurrent 包的重要成员。本文将结合 Java 内存模型,分析 JDK 源代码,探索 ConcurrentHashMap 高并发的具体实现机制。 由于 ConcurrentHashMap 的源代码实现 ...

JMX(一)JMX 与系统管理

前言 在 Java 程序的运行过程中,对 JVM 和系统的监测一直是 Java 开发人员在开发过程所需要的。一直以来,Java 开发人员必须通过一些底层的 JVM API,比如 JVMPI 和 JVMTI 等,才能监测 Java 程序运行过程中的 JVM 和系统的一系列情况,这种方式一直以来被人所诟病,因为这需要大量的 C 程序和 JNI 调用,开发效率十分低下。于是出现了各种不同的专门做资源管理的程序包。为了解决这个问题,Sun 公司也在其 Java SE 5 版本中,正式提出了 Java 管理扩展(Java Management Extensions,JMX)用来管理检测 Jav ...

bootstrap布局和栅格解析

布局方式 Bootstrap提供俩种布局方式固定(网格)布局和流式(网格)布局。结合上篇文章所讨论的栅格系统来说,Bootstrap的布局实际上是在栅格外加个容器(container)。固定布局加的是固定宽度(width)的容器,流式布局加的是自适应(或叫可变)宽度的容器,这是二者的唯一区别。 1、固定布局 下面来看个示例: <body> <div class="container"> <div class="row"> <div class=" col-md-8"> col-md ...

线程池的拒绝策略

默认提供4种拒绝策略,可以自定义实现RejectedExecutionHandler进行扩展 1、AbortPolicy 2、DiscardPolicy 3、DiscardOldestPolicy 4、CallerRunsPolicy AbortPolicy,无法处理任务任务的时候,直接抛出异常, public static class AbortPolicy implements RejectedExecutionHandler { /** * Creates an <tt>AbortPolicy</tt>. ...

线程池BlockingQueue排队策略

排队有三种通用策略 1、直接提交。无缓冲等待队列SynchronousQueue,它将任务直接提交给线程而不保持它们。在此,如果不存在可用于立即运行任务的线程,则试图把任务加入队列将失败,因此会构造一个新的线程。此策略可以避免在处理可能具有内部依赖性的请求集合时出现锁定。直接提交通常要求无界 maximumPoolSizes 以避免拒绝新提交的任务。当命令以超过队列所能处理的平均数连续到达时,此策略允许无界线程具有增长的可能性。 2、无界队列。使用无界队列(例如,不具有预定义容量的 LinkedBlockingQueue,DelayQueue,PriorityBlockingQueue ...

ThreadPoolExecutor执行策略

java.util.concurrent.ThreadPoolExecutor构造函数如下: public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, RejectedExecutionHandler handler); 参数 描述 corePoolSize 核心线程数,指保留的线 ...

Btrace 插桩前后的类变换分析

btrace 插桩过程 btrace-client通过attach api附加到远程的目标进程上,建立socket通信连接,然后Btrace-client编译 btrace script脚本并验证,将编译好的class,通过socket传递到目标进程,btrace-agent对其class类变换, 对监测的类进行代码插桩,监测函数的信息,通过socket返回给btrace-client,显示监测的信息。 testSubCharles2函数插桩前 1. 插桩前的com.charles.test.CaseObject 的testSubCharles2方法代码如下: ...

Btrace扩展小工具

背景 在不能调试的情况下,需要定位问题,比较难,排除问题费时费力。 1、 编写写btrace脚本,实现对数据的监控,但是脚本调试起来需要时间 2、 对于没有重写toString方法的复杂的对象,不能够打印出具体的属性值 3、 对于函数返回值,需要找到返回类型所在路径,然后将其添加到btrace脚本编译路径下比较麻烦。 4、 对于没有做异常捕获的程序,没有打印栈信息。 目标 通过命令行交互的方式,实现程序监测。 1、 实现函数和返回参数的打印 2、 将复杂对象转成json格式化字符串显示 3、 查看函数的调用时间 4、 死锁检测 5、 打印未 ...