- 浏览: 248665 次
- 性别:
- 来自: 深圳
最新评论
-
bit1129:
huanjia27 写道楼主, //数字小,优先级高 ...
PriorityBlockingQueue优先级规则 -
huanjia27:
楼主, //数字小,优先级高 public in ...
PriorityBlockingQueue优先级规则 -
bit1129:
优先级队列有点坑。。。对于返回的数组或者Iterator,对它 ...
PriorityBlockingQueue优先级规则 -
sun_2008:
再加一个参数cachePrepStmts=true才行,好像预 ...
Mysql是支持预编译的,只是默认没开启 -
hooray520:
nice~~
ThreadPoolExecutor线程池实现逻辑
文章列表
PriorityBlockingQueue里面存储的对象必须是实现Comparable接口。队列通过这个接口的compare方法确定对象的priority。
规则是:当前和其他对象比较,如果compare方法返回负数,那么在队列里面的优先级就比较搞。
下面的测试可以说明这个断言:
查看打印结果,比较take出来的Entity和left的entity,比较他们的priority
public class TestPriorityQueue {
static Random r=new Random(47);
public static void main(Strin ...
之前不知道是看了哪篇文章,形成了一个概念,说ThreadPoolExecutor的线程超时回收机制,是采用的DeplyQueue,我觉得非常惊讶,DeplyQueue虽然说是超时的能够取出回收,但是那些没有超时的对象,是怎么也取不出来的啊,带着这个问题,我详细阅读了一下这部分的源代码,发现其实现和DelayQueue一点关系也没有,也算是解决了我的一个疑问。
该线程池的实现,主要有两个容器,一个放任务,一个放线程,然后其他一堆参数,都围绕这2个容器进行设置。
BlockingQueue: 这是一个任务(Runnable)队列。每次提交上来的任务,如果不是能立刻执行的话,都会存到这个队列里 ...
5.0的多线程任务包对于同步的性能方面有了很大的改进,在原有synchronized关键字的基础上,又增加了ReentrantLock,以及各种Atomic类。了解其性能的优劣程度,有助与我们在特定的情形下做出正确的选择。
总体的结论先摆出来:
synchronized:
在资源竞争不是很激烈的情况下,偶尔会有同步的情形下,synchronized是很合适的。原因在于,编译程序通常会尽可能的进行优化synchronize,另外可读性非常好,不管用没用过5.0多线程包的程序员都能理解。
ReentrantLock:
ReentrantLock提供了多样化的同步,比如有时间限制的同步,可 ...
DelayQueue也和其他阻塞队列一样,采用put和take进行存储。但有意思的是,这个队列里面所存储的对象都带有一个时间参数,采用take获取数据的时候,如果时间没有到,取不出来任何数据。而加入数据的时候,是不会阻塞的。
一般用在清理超时对象的场景:
比如,有一批对象,用完后存入(offer)这个队列,并设定60秒delay(超时), 然后有个线程在外面拼命的take,如果有任何对象被take出来,就清理。只有那些被限制超过60秒的,才会被take.
除此之外,DelayQueue中的对象,还可以通过iterator进行访问,因此,它非常适合用在以下这种场景: 当我们有一组资源,每个 ...
多线程任务协作中,如果有一个任务,需要在其他线程的任务完成以后才能执行的情况下,CountDownLatch就派上用场,它能使用很少的代码,省掉一堆wait和notify,帮你很放心的完成这种协作。
使用步骤:
1. 首先所有协作线程都引用同一个CountDownLatch
2. CountDownLatch初始化传入一个计数器
3. 最后执行的那个任务,需要调用CountDownLatch.await方法
4. 当CountDownLatch的计数器数值为0的时候,await的那个任务就能自动执行
5. 前面的多个任务,需要调用CountDownLatch.countDown来减少计数器的 ...
JDK5的concurrent包里面尽是宝贝,还好我有的是时间,正好可以一一八来。
以前用多线程处理 生产者-消费者 问题的时候,需要采用wait,notify, 现在有了这些阻塞队列,就可以把这些wait,notify抛一边,轻易的就能解决问题。
首先是SynchronousQueue,这个队列里面只能放一个对象,在没有被take之前,所有的add都会被阻塞,反之,如果队列里面没有对象,那么所有的take也都会被阻塞。
下面代码中的SynchronousQueue,可以替换成ArrayBlockingQueue, 和LinkedBlockingQueue。
ArrayBlockingQ ...
我一直觉得能够绘画的人,他们一定有自己的一套方法,对事物的观察,有独到之处,能够发现事物的神韵,然后记录到画纸上。
《五天学会绘画》这本书给出了答案,这是一种右脑思维的模式,当你进入到这种模式的时候,眼前的事物,就不再是一个整体,在这个思维里面,他们是一个个的圆形,方形,线条,他们的位置,比例... 当你用笔把这些东西组合起来的时候,事物的神韵就体现出来了。
按照书中所提示的方法,我也画了几张画像,真的没想到竟然能够如此神似。进入到这个思维模式的人,经常能够看到平常所不能发现,或者不曾留意的细节。
当了解了这种思维模式以后,我惊奇的发现,其实我以前经常也会进入到这种思考模式里面。当一个人需 ...
由于线程本质的特性,我们并不能直接捕获从线程中逃逸的异常,一旦异常逃逸出run方法,那它就直接上控制台了。
/*
* 1.Thread的异常在Thread外面是捕获不到的
*/
public static void testThreadException(){
ExecutorService se=Executors.newCachedThreadPool();
try{
se.execute(new Runnable(){
public void run( ...
前面对并发编程,我一直是心怀崇敬,如履薄冰。尽管如此,稍微复杂一点的并发任务,就搞的焦头烂额。现整理一些学习笔记,以便随时记录,随时巩固。
//该线程池是个可以回收利用的线程池,按需产生线程,可以被复用,线程可以闲置60秒,或者被销毁
//一般多线程程序,首选该线程池
public static void testCachedThreadPool(){
ExecutorService se=Executors.newCachedThreadPool();
for(int i=0;i<4;i++){
...
买这本书就冲着这个书名了,五分钟和陌生人成为朋友,有点不可思议。
每个人都希望自己有很多朋友,但现实中,像我这样的技术类IT人,朋友真的少的可怜。且不说朋友,就连认识的,见了面能知道名字,能够说的上话的都不多。想想都有些悲哀,在联想那几年,实验室有两三百人,而真正能知道名字,见面会主动打个招呼的,估计也就三分之一;离职后还能再联系的,也就两三个了。
这方面真的需要改善了,希望还来的及。
五分钟和陌生人成为朋友,总结起来,重要也就那么几个观点:
1. 强迫自己记住别人的名字,采用关联法,见面,或者道别的时候大声的念出来。
2. 初次见面开场对白很有意思,问一个很容易回答,简单的问题,接下 ...
这本书名头起的很大,号称美国CEO最惧怕对手读到的书,不过能实际规律,总结一下也就那么几条。花了一个晚上,以及一个早上的时间就读完了,收获不少,作者用无数的实例证明着这些商规的重要性。
买这本书的时候,还真的是不得不感慨一下当当网数据挖掘的功力,自从我看完影响力这本书以后,对营销,心理学等产生了兴趣,当当网好像很清楚这一点一样,给我推荐了一系列相关的书籍让我欲罢不能。然后我就又买了销售圣经,22条商规, 职场礼仪,5分钟成为朋友等等。而我当然也乐在其中。
商规中分几条主线来介绍, 简单的可以归为几个问题;
一个市场总是会呈现二元化,就是两个巨头并驾齐驱
成为某个理念领导者非常重要(豪华 ...
需求分析的基本问题:
1. 专注于用户的任务,Task,而不是所谓的技术。
2. 时刻清楚谁是最终用户,最终用户使用你的软件所需要服务的对象是谁。
3. 软件做什么用的,支持什么活动,解决什么问题,提供什么价值
4. 当前的客户他们所面对的问题是什么,对于目前的工作,他们喜欢什么,不喜欢什么。
5. 当前的客户具备什么样的知识水平,是否有学习的意愿,他们经常怎么去学。
6. 对于新软件所要管理的数据,或者信息,客户有什么是最担心的。
7. 客户习惯怎样的工作方式,新软件是否会与这些工作习惯合拍,或者是客户将要围绕这个软件做什么样的改变。
8. 用户有些什么样的习惯用语,表达什么样 ...
第一章:
最有用的一个定律就是这个书名,不要让用户思考,这是做界面最最基本的原则。具体实施会包括许多许多细节,比如图片的暗示,口号,布局,心理研究,习惯用法 等等。
事实上,很多地方都可能会强迫用户去思考:
1.长得不太像按钮的,类似按钮控件
2.搜索框中,过多的选择,或者下拉框
3.前后不一致的描述,让用户疑惑
终极目标就是要让界面做到不言而喻的效果,如果做不到,那也至少能够引导学习,自我解释
所以,我们所设计的界面,首先要有明确的目标,那就是期望用户在网站上做什么操作, 然后就是提供这些操作,最后就是采用合适的界面方式,引导用户来做这些操作。
用户的Web使用方式:
实际上用 ...
Leader Ship是一种管理的方法,与管理者的技术关系不是很大。技术能力强的,不一定能够成为一名合格的leader。
Leader有两个责任,1,和团队一起完成project, 2,负责团队成员的成长
Leader的类型也有两种: 1是管理奴才的, 2是管理人才的
组内成员评估:
XXX D3 -- D4之间, 能力已经很不错,但是在于设计思想方面还可以进一步提高。不是选择一种简单的方式来实现,而是选择一种对客户最有益,并且最好维护的方式去实现。而其往往有这个趋向,但是苦于没有好的模式可以借鉴。
设计,实现的复杂度,虽然增加了自己的工作量,但是会给软件带来好处的东西就一定要去做 ...
5.0里面, 字符连接用+号,速度已经可以和StringBuffer媲美了,其唯一的限制就是采用+号连接的时候,不能跨循环。看来编译过程中做了很多优化的工作啊, 本来我还一直以为到6.0以后才有这个优化的,没想到5.0就有了。
public static void addString(){
String b="";
long start=System.currentTimeMillis();
for(int i=0;i<10000;i++){
b+=i+"2"+&qu ...