自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

aty

虽有嘉肴,弗食,不知其旨也;虽有至道,弗学,不知其善也。是故学然后知不足,教然后知困。知不足,然后能自反也;知困,然后能自强也。

  • 博客(9)
  • 资源 (1)
  • 收藏
  • 关注

原创 理解ThreadPoolExecutor源码(二)execute函数的巧妙设计和阅读心得

使用这么多if-else就是为了性能考虑,减小锁的使用范围,避免execute方法整个执行过程中都持有mainLock锁。可以看到只有调用addIfUnderCorePoolSize、ensureQueuedTaskHandled、addIfUnderMaximumPoolSize这3个方法才需要持有锁。如果新提交的任务,不会进入这3个方法,那么就不需要持有锁。我们来看下,execute方法的设计是否能够有效地减少进入这3个方法的次数,实现快进快出。

2014-08-28 23:05:42 2575

原创 吐槽一下项目中的代码坏味道:滥用java常量

为什么要把0和""定义成一个常量呢?这是没有正确理解到底什么是魔鬼数字和硬编码。使用常量,出于如下几个原因:1、为了可读性,一个好的名字显然比一串写死的数字更容易理解。2、避免冗余,让代码更容易修改,实现一处该,处处该的效果。3、避免程序员手写常量,不小心写错。比如多写了个0或者是少写了个0等。4、常量必须是被多个地方使用,而且在不同的地方代表相同的含义。如果定义的常量没有达到这4个要求中的任意一个,那么可以说这个常量的使用是没有意义的,会导致另一中代码坏味道:没有必要的复杂性。

2014-08-28 21:58:39 2601 2

原创 hibernate预编译SQL语句中的setParameter和setParameterList

使用预编译SQL语句和占位符参数(在jdbc中是?),能够避免因为使用字符串拼接sql语句带来的复杂性。我们先来简单的看下,使用预编译SQL语句的好处。使用String sql = "select * from Student where name=" + name;如果name的值是1或 "aty"或"aty'aty",就会产生下面错误的sql--ORA-01722 invalid numb

2014-08-22 11:16:00 12976

原创 似懂非懂的SynchronousQueue和长度为1的BlockingQueue

(阅读ArrayBlockingQueue源码,很容易知道有界阻塞队列的长度至少为1,也就是至少能缓存下一个数据。长度为0的阻塞队列是没有意义的,因为生产者不能生产,消费者不能消费。但是SynchronousQueue的javadoc文档提到A synchronous queue does not have any internal capacity, not even a capacity of one。也就说同步队列的容量是0,不会缓存数据。可以看到同步队列有这样的特性:producer waits u

2014-08-19 19:32:26 5496 1

原创 使用HTML的表单form上传文件,需要考虑的几个问题

应用系统中经常需要有文件上传功能,一般的做法都是使用HTML的和,或者使用第三方文件上传组件,如swfupload和uploadify。我们都知道如果向服务器提交数据,一般来说都是使用POST请求,请求数据会放在请求体中,以key1=value1&key2=value2的形式。这样的报文,服务器是很容易解析的。如果是上传文件,通过httpwatch抓包工具,我们可以发现:文件的内容也是放在post

2014-08-08 13:22:41 5711

原创 使用JUC并发工具包的Lock和Condition,实现生产者和消费者问题中的有界缓存

JDK5.0之前,用java实现生产者和消费者的唯一方式就是使用synchronized内置锁和wait/notify条件通知机制。JDK5.0之后提供了显示锁Lock和条件队列Condition,与内置锁和内置条件队列相对应,但是显示的锁和条件队列,功能更强大,更灵活。此外JDK5.0之后还提供了大量很有用的并发工具类,如BlockingQueue等,基于这些数据结构,能够方便、快速、高效的构建

2014-08-07 21:23:03 1698 2

原创 我对java中任务取消和线程中断的一点儿理解

在JDK中任务就是一个Runnable或Callable对象,线程是一个Thread对象。任务运行在单个线程或者是线程池ExecutorService中。我们知道,让线程死亡的方式有2种:正常完成和未捕获的异常。如果想让任务结束,也是只有这2种方式。

2014-08-07 20:42:11 2561

原创 LockSupport的park和unpark的基本使用,以及对线程中断的响应性

LockSupport是JDK中比较底层的

2014-08-04 22:26:35 26465 10

原创 eclipse黄色警告(finally block does not complete normally) ,不建议在finally中使用return语句

在eclipse中编写如下的代码,eclipse会给出黄色告警:finally block does not complete normally。public class Test{ public static void main(String[] args) { System.out.println(m1(null)); } public

2014-08-04 14:51:35 4308

eclipse最常用的快捷键

这是我个人从网上整理出来的快捷键,日常很常用的列在这里。而且比较清晰,欢迎大家下载。在eclipse提高开发效率

2012-10-12

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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