觉悟吧,少年!

——认真编码,认真生活!

java并发-独占锁与共享锁

1 锁的独占与共享       java并发包提供的加锁模式分为独占锁和共享锁,独占锁模式下,每次只能有一个线程能持有锁,ReentrantLock就是以独占方式实现的互斥锁。共享锁,则允许多个线程同时获取锁,并发访问 共享资源,如:ReadWriteLock。AQS的内部类Node定义了两个常量...

2014-12-31 11:34:45

阅读数:12048

评论数:0

我的2014-年终有感

不管愿意不愿意,时间总是推搡着我们往前走去。因为春节的存在,纵使每年已经到了12月31日, 我也总有种错觉:还没过年呢,这一年还没过完呢?而事实呢,等到年过完,节也终了时,新的一年又过去了一个季度了。愿与不愿,我们已站在年关,站在时间新旧交替的节点上,转身望过去,看到过去的自己是什么样子的呢? ...

2014-12-30 16:31:09

阅读数:2082

评论数:9

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

内置锁和内置条件队列一起,一个简单的应用是创建可阻塞的有界缓存区,java并发包的BlockingQueue就是一个利用Lock和显式条件队列实现的可阻塞的有界队列。总结内置锁和内置条件的原理,这里我们用另一种方式实现简单的可阻塞缓存。源码如下:         首先,创建一抽象有界缓存类ABo...

2014-12-30 09:51:49

阅读数:3340

评论数:0

java并发-AQS.ObjectCondition源码解析

1 什么是条件队列        它使得一组线程能够通过某种方式来等待特定的条件变成真,条件队列的元素是一个个正在等待状态的线程。对象的内置锁(synchronized语义对应的同步机制),关联着一个内置的条件队列。Object的wait/notify/notifyAll等方法构成了内部条件队列的...

2014-12-29 15:43:15

阅读数:3316

评论数:1

java并发-ReentrantLock源码分析

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

2014-12-26 14:28:47

阅读数:1203

评论数:0

项目总结-SpringMVC细节问题

1  只是因为SQL结束时多写了一个分号        使用SpringMVC+iBatis开发,编写iBatis的SQL映射文件时,可能会习惯性地在语句结束时打一个分号,结果项目的DAO执行过程中出现了SQL异常:Cause: java.sql.SQLException: ORA-00911:...

2014-12-23 15:47:21

阅读数:1131

评论数:0

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

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

2014-12-22 14:37:24

阅读数:1432

评论数:0

HotSpot GC日志分析

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

2014-12-19 17:01:25

阅读数:946

评论数:0

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

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

2014-12-17 16:35:24

阅读数:1262

评论数:0

java并发-ThreadPoolExecutor源码阅读笔记

java并发包中的任务调度框架Executor的实现类ThreadPoolExecutor的源码阅读。首先,类结构图如下:             线程池维护着三个容量变量poolSize、corePoolSize、maxPoolSize,已经一个空闲时间keepAliveTime。这四个因素...

2014-12-16 15:09:48

阅读数:1024

评论数:0

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

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

2014-12-15 16:11:32

阅读数:2131

评论数:0

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

使用java的任务管理框架的线程池执行任务时,线程池的任务等待队列被填满时,饱和策略开始发挥作用。ThreadPollExecutor的饱和策略通过setRejectedExecutionHandler来修改。JDK提供了4中饱和策略如下:        AbortPolicy是默认的饱和策略,...

2014-12-15 15:36:21

阅读数:1758

评论数:0

EffectiveJava-Methods

最近在阅读《Java Concurrentcy in Practice》,这本书的作者全是java领域的专家,包括《Effective Java》的作者Joshua Bloch。关于Effective Java,作为java编码规范,里面常见的编码技巧应该是熟稔于心的。方法编写,摘录一二。   ...

2014-12-15 13:52:17

阅读数:734

评论数:0

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

1 HotSpot的垃圾收集是基于分代的,不同代的内存区域根据其对象生命周期的长短特性选择不同的垃圾收集算法。         HotSpot提供的垃圾收集器:    2 看周志明显示的《深入理解Java虚拟机》第三章垃圾收集器与内存分配,对Young generation的Parallel S...

2014-12-07 13:31:47

阅读数:2434

评论数:0

网络基础-netsh命令

network shel,网络配置命令行工具netsh interface set命令和netsh interface show命令。netsh有不同层级的,每次敲击一个层级的命令后点击空格,可查看使用语法。    1)主要是接口设置IP、子网掩码、网关IP,使用命令行设置网络IP,通过键值对设置...

2014-12-04 10:52:54

阅读数:854

评论数:0

java基础-数值运算中的类型转换问题

1)        一个简单的运用,需要打印一个月的日志记录(日志每天每隔一个小时生成一条记录),简单实现时需要用到每小时的毫秒数,结果发现定义每小时的毫秒这个基数的类型不同,得到的结果也不同。这是一个很容易忽略的问题,int类型的长度是4字节,如果是大数乘法会导致结果溢出而得到莫名其妙的结果。 ...

2014-12-02 16:49:46

阅读数:1505

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭