关闭

编译JDK源代码,开启Debug信息

看JUC源码的时候,想debug查看一些本地变量,不行,然后百度之,找到一个方法,仅此记录!百分百可以! 用Eclipse Debug,当跟踪进jdk api里时(比如javax.swing包里的类),无法查看某些local filed的值。这是因为jdk里的代码在打包时删除了一些用于调试的信息,以减小安装包的体积。不过可以通过重新编译jdk源代码来恢复此功能。 1.在Eclips...
阅读(364) 评论(0)

JUC源码分析22-队列-SynchronousQueue

SynchronousQueue是一种比较特殊的阻塞队列,不同于之前的阻塞队列,特点为: 1.每次put必须有take的存在,也就是说生产者将一个元素put传递给一个消费者,消费者不存在就put不成功; 2.内部没有容量来维持存放元素,所以size,迭代等一些方法没有意义; 3.使用cas操作,没有使用锁; 4.通过栈(非公平),队(列公平)2中结构来支持公平\非公平策略。 newC...
阅读(350) 评论(0)

Eclipse 控制台中文乱码

一个坑跳了2次,记录下,eclipse中文在控制台打印乱码。run->run configurations->commons->GBK:...
阅读(167) 评论(0)

JUC源码分析21-队列-LinkedBlockingDeque

LinkedBlockingDeque基于双向链表实现的阻塞队列,根据构造传入的容量大小决定有界还是无界,默认不传的话,大小Integer.Max。 实现BlockingDequeue接口,这个接口继承BlockingQueue和Dequeue,看下接口方法: public interface BlockingDeque extends BlockingQueue, Deque { /** ...
阅读(622) 评论(0)

JUC源码分析20-队列-DelayQueue

画个JUC阻塞队列的类关系图,之前都没在意,画一下感觉会清楚很多 DelayQueue是无界的阻塞队列,其特点是实现队列元素的延迟出队,通俗点说就是队列元素可以设置延迟时间,时间不到,就待在队列中,很有意思的东西,感觉跟redis设置过期时间一样。队列元素不容许添加null元素。DelayQueue可以用来实现调度的定时任务或者缓存的过期。 添加的队列元素必须实现Delayed接口: ...
阅读(352) 评论(0)

JUC源码分析19-队列-PriorityBlockingQueue

PriorityBlockingQueue是一个基于数组实现的线程安全的无界队列,原理和内部结构跟PriorityQueue基本一样,只是多了个线程安全。javadoc里面提到一句,1:理论上是无界的,所以添加元素可能导致outofmemoryerror;2.不容许添加null;3.添加的元素使用构造时候传入Comparator排序,要不然就使用元素的自然排序。 PriorityBlocking...
阅读(1329) 评论(0)

JUC源码分析18-队列-LinkedBlockingQueue

LinkedBlockingQueue是基于单向链表实现的有界阻塞队列,队列元素遵循FIFO,LinkedBlockingQueue比基于数组的阻塞队列拥有更好的吞吐量,但是在大部分并发应用中,性能不如基于数组的队列。 和ArrayBlocingQueue一样继承AbstractQueue,实现BlockingQueue接口,不再看BlockingQueue接口代码,直接看LinkedBlock...
阅读(192) 评论(0)

JUC源码分析17-队列-ArrayBlockingQueue

看ArrayBlockingQueue的javadoc说明,简单翻译过来: 1.基于数组实现的有界阻塞队列,队列采用FIFO; 2.因为基于数组,所以队列创建后大小不能改变。线程在插入元素到一个满的队列时会阻塞,线程获取元素时,队列为空也会阻塞; 3.对于队列的生产和消费线程提供了公平非公平策略。 ArrayBlockingQueue继承AbstractQueue抽象类,实现了Blocki...
阅读(175) 评论(0)
    个人资料
    • 访问:61823次
    • 积分:1342
    • 等级:
    • 排名:千里之外
    • 原创:62篇
    • 转载:72篇
    • 译文:1篇
    • 评论:15条
    最新评论