关闭

java并发-独占锁与共享锁

1 锁的独占与共享       java并发包提供的加锁模式分为独占锁和共享锁,独占锁模式下,每次只能有一个线程能持有锁,ReentrantLock就是以独占方式实现的互斥锁。共享锁,则允许多个线程同时获取锁,并发访问 共享资源,如:ReadWriteLock。AQS的内部类Node定义了两个常量SHARED和EXCLUSIVE,他们分别标识 AQS队列中等待线程的锁获取模式。      很显...
阅读(8085) 评论(0)

我的2014-年终有感

不管愿意不愿意,时间总是推搡着我们往前走去。因为春节的存在,纵使每年已经到了12月31日, 我也总有种错觉:还没过年呢,这一年还没过完呢?而事实呢,等到年过完,节也终了时,新的一年又过去了一个季度了。愿与不愿,我们已站在年关,站在时间新旧交替的节点上,转身望过去,看到过去的自己是什么样子的呢?        这一年,我成了一个小宝她妈,陪着那个嗷嗷待哺的小人,看着她从一丁点的身长、邹邹的脸庞,浑...
阅读(1999) 评论(9)

java并发-使用内置条件队列实现简单的有界缓存

内置锁和内置条件队列一起,一个简单的应用是创建可阻塞的有界缓存区,java并发包的BlockingQueue就是一个利用Lock和显式条件队列实现的可阻塞的有界队列。总结内置锁和内置条件的原理,这里我们用另一种方式实现简单的可阻塞缓存。源码如下:         首先,创建一抽象有界缓存类ABoundedBuffer,提供插入和删除的基本实现。 /** * @title :AB...
阅读(2890) 评论(0)

java并发-AQS.ObjectCondition源码解析

1 什么是条件队列        它使得一组线程能够通过某种方式来等待特定的条件变成真,条件队列的元素是一个个正在等待状态的线程。对象的内置锁(synchronized语义对应的同步机制),关联着一个内置的条件队列。Object的wait/notify/notifyAll等方法构成了内部条件队列的API(即将内部锁与内部条件队列关联的机制)。 内部条件队列是需要内置锁保护的,即:需要调用对象X中...
阅读(2650) 评论(0)

java并发-ReentrantLock源码分析

1关于可重入锁        ReentrantLock是基于AQS实现的可重入的同步工具类,它提供了两种同步器的实现即公平锁FairSync和非公平锁NonfairSync。它提供了一种无条件的、可轮询的、定时的以及可中断的锁获取操作,所有的加锁和解锁都是显式的。tryLock(),tryLock(long ,TimeUnit)分别提供了可轮询的、可定时的锁获取方式。 Lock()提供了无...
阅读(1145) 评论(0)

项目总结-SpringMVC细节问题

1  只是因为SQL结束时多写了一个分号        使用SpringMVC+iBatis开发,编写iBatis的SQL映射文件时,可能会习惯性地在语句结束时打一个分号,结果项目的DAO执行过程中出现了SQL异常:Cause: java.sql.SQLException: ORA-00911: 无效字符。还有一些类似的无效的数字等错误,是因为SQL语句的列类型和传入的参数类型不匹配,可能原因是...
阅读(1075) 评论(0)

java基础-HashMap动态扩容数据转移源码阅读

HashMap,一种利用元素key的hash值查找元素的容器数据结构。其动态扩容的操作流程:遍历原Entry数组,将每个数组元素的bucket链表数据转移到扩容的新数组中,同时释放原数组的内存。JDK源码如下: /** * Transfers all entries from current table to newTable. */ void tran...
阅读(1231) 评论(0)

HotSpot GC日志分析

HotSpot的内存分配的基本策略是对象优先在Eden区分配,如果Eden区剩余空间不足以分配内存时,触发minorGC,将Eden区数据复制到Survior区,如果Survior区空间不够,则将存活对象复制到Old区域。测试GC回收的简单代码: /** * * @title :TestMain * @description :-Xms20M -Xmx20M -Xmn1...
阅读(820) 评论(0)

项目总结-web项目中数据一致性问题

最近参与的项目微信工作平台开发,扫码关注某个开发者公众账号时,由于操作没有反应,而扫描了两次,结果,微信服务器也推送了两条消息到开发者服务器。结果,业务处理过程中入库微信粉丝记录也入了两条。微信关注事件的处理流程如下: /** * 关注事件:入库粉丝记录 * @param msgRequest * @return */ private String subscribe(MsgR...
阅读(1021) 评论(0)

java并发-ThreadPoolExecutor源码阅读笔记

java并发包中的任务调度框架Executor的实现类ThreadPoolExecutor的源码阅读。首先,类结构图如下:             线程池维护着三个容量变量poolSize、corePoolSize、maxPoolSize,已经一个空闲时间keepAliveTime。这四个因素共同决定着线程的创建和销毁。通过调节线程池的基本大小和存活时间,可以帮助线程池回收空闲线程占有的...
阅读(954) 评论(0)

线程池的饱和策略-Semaphore实现任务提交限制

java并发编程实践阅读笔记之线程池的使用         当线程池的工作队列被填满后,如果没有预定义的饱和策略来阻塞任务的执行,则可以通过信号量Semaphore来限制任务的到达率。Semaphore是一个同步工具类,用来控制同时访问某个特定资源的操作数量。它的acquire方法返回一个虚拟的许可,如果没有可用的许可,则阻塞该方法的调用线程直到有可用许可为止。如果线程池使用无界队列缓冲任务时...
阅读(1600) 评论(0)

线程池的饱和策略-调用者执行

使用java的任务管理框架的线程池执行任务时,线程池的任务等待队列被填满时,饱和策略开始发挥作用。ThreadPollExecutor的饱和策略通过setRejectedExecutionHandler来修改。JDK提供了4中饱和策略如下:        AbortPolicy是默认的饱和策略,该策略会抛出未检查异常RejectedExecutionException,调用者可以捕获这个异常...
阅读(1412) 评论(0)

EffectiveJava-Methods

最近在阅读《Java Concurrentcy in Practice》,这本书的作者全是java领域的专家,包括《Effective Java》的作者Joshua Bloch。关于Effective Java,作为java编码规范,里面常见的编码技巧应该是熟稔于心的。方法编写,摘录一二。        1 方法参数校验        这一点,是我刚入职时就已经形成的编码意识,防患于未然,在进...
阅读(711) 评论(0)

垃圾收集器-周志明先生的深入理解JVM摘录

1 HotSpot的垃圾收集是基于分代的,不同代的内存区域根据其对象生命周期的长短特性选择不同的垃圾收集算法。         HotSpot提供的垃圾收集器:    2 看周志明显示的《深入理解Java虚拟机》第三章垃圾收集器与内存分配,对Young generation的Parallel Scaverge和Tenured generation的CMS印象深刻,简单整理了下相关的知识。H...
阅读(2332) 评论(0)

网络基础-netsh命令

network shel,网络配置命令行工具netsh interface set命令和netsh interface show命令。netsh有不同层级的,每次敲击一个层级的命令后点击空格,可查看使用语法。    1)主要是接口设置IP、子网掩码、网关IP,使用命令行设置网络IP,通过键值对设置,也可以直接设置值查看帮助语法net interface ip set address ?可见。(这...
阅读(743) 评论(0)
16条 共2页1 2 下一页 尾页