欢迎来到天天文库
浏览记录
ID:32290354
大小:1.59 MB
页数:43页
时间:2019-02-02
《Java并发程序设计教程》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、版本:2010-07-29Java并发程序设计教程温绍锦(昵称:温少)邮箱:szujobs@hotmail.com旺旺:shaojinwensjQQ:1420452Blog:http://www.cnblogs.com/jobs/旧时王谢堂前燕,飞入寻常百姓家。内容列表1、使用线程的经验:设置名称、响应中断、使用ThreadLocal2、Executor:ExecutorService和Future☆☆☆3、阻塞队列:put和take、offer和poll、drainTo4、线程间的协调手段:lock、c
2、ondition、wait、notify、notifyAll☆☆☆5、Lock-free:atomic、concurrentMap.putIfAbsent、CopyOnWriteArrayList☆☆☆6、关于锁使用的经验介绍7、并发流程控制手段:CountDownlatch、Barrier8、定时器:ScheduledExecutorService、大规模定时器TimerWheel9、并发三大定律:Amdahl、Gustafson、Sun-Ni10、神人和图书11、业界发展情况:GPGPU、OpenCL
3、12、复习题学习的过程,着重注意红星标识☆的内容,学完之后,要求能够回答复习题。启动线程的注意事项Threadthread=newThread("threadname"){Threadthread=newThread(){publicvoidrun(){publicvoidrun(){//doxxx//doxxx}1}3};};thread.start();thread.setName("threadname");thread.start();publicclassMyThreadextendsThrea
4、d{publicMyThread(){Threadthread=newThread(task);//传入任务super("threadname");thread.setName(“threadname");4}2thread.start();publicvoidrun(){//doxxxThreadthread=newThread(task,“threadname");}thread.start();}MyThreadthread=newMyThread();5thread.start();无论何种方式,
5、启动一个线程,就要给它一个名字!这对排错诊断系统监控有帮助。否则诊断问题时,无法直观知道某个线程的用途。要响应线程中断thread.interrupt();Threadthread=newThread("interrupttest"){Threadthread=newThread("interrupttest"){publicvoidrun(){publicvoidrun(){for(;;){for(;;){doXXX();try{if(Thread.interrupted()){doXXX();brea
6、k;}catch(InterruptedExceptione){}break;}}catch(Exceptione){}//handleException};1}thread.start();}}};3thread.start();publicvoidfoo()throwsInterruptedException{if(Thread.interrupted()){thrownewInterruptedException();}}2程序应该对线程中断作出恰当的响应。ThreadLocalThreadLoca
7、l顾名思义它是localvariable(线程局部变量)。它的功用非常简单,就是为每一个使用该变量的线程都提供一个变量值initialValue():T的副本,是每一个线程都可以独立地改变自己的副本,而不get():Tset(Tvalue)会和其它线程的副本冲突。从线程的角度看,就好像每一个remove()线程都完全拥有该变量。使用场景Tokeepstatewithathread(user-id,transaction-id,logging-id)Tocacheobjectswhichyouneed
8、frequently隐式传参注意:使用ThreadLocal,一般都是声明在静态变量中,如果不断的创建ThreadLocal而且没有调用其remove方法,将会导致内存泄露。任务的提交者和执行者为了方便并发执行任务,出现了一种专门用来执行任务的实现,也就是Executor。由此,任务提交者不需要再创建管理线程,使用更方便,也减少了开销。ExecutorServiceTaskSubmitterExecutorThreadExec
此文档下载收益归作者所有