Java并发编程实践分享

Java并发编程实践分享

ID:36539189

大小:524.60 KB

页数:30页

时间:2019-05-09

Java并发编程实践分享_第1页
Java并发编程实践分享_第2页
Java并发编程实践分享_第3页
Java并发编程实践分享_第4页
Java并发编程实践分享_第5页
资源描述:

《Java并发编程实践分享》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Java并发编程实践分享——WA定时器编程经验分享cesc.wangl以下方法哪个是线程安全第一个方法:publicvoidadd(inti){i++;}第二个方法:publicObjectgetLast(Listlist){intlastIndex=list.size()-1;returnlist.get(lastIndex);}第三个方法:publicObjectgetLast(Vectorv){intlastIndex=v.size()-1;returnv.get(lastIndex);}第一个方法:private

2、staticvoidtestList(){Listtests=newArrayList();tests.add("a"); tests.add("b"); tests.add(“temp"); tests.add("c");for(Stringtest:tests){if(test.equals("b")){ tests.remove(“temp"); } System.out.println(test);} }第二个方法:privatestaticvoidtestVector(){Vec

3、tortests=newVector();tests.add("a");tests.add("b");tests.add(“temp");tests.add("c");for(Stringtest:tests){if(test.equals("b")){tests.remove(“temp");}System.out.println(test);}}执行结果什么?JUC简介线程池AtomicLock并发编程注意事项JDK1.5新增的类库提供并发编程中很常用的实用工具类线程池选哪个?多少线程

4、合适?多大的队列合适?第一个问题ThreadPoolExecutorExecutorsBlockingQueuecorePoolSize//核心池的大小maxPoolSize//最大池的大小keepAliveTime//超时时间workQueue//等待队列handler//饱和策略corePoolSize=CPU个数+1(计算密集型的操作)(JavaConcurrencyInPractice)AbortPolicy抛异常RejectedExecutionException CallerRunsPolicy调度者执行Di

5、scardOldestPolicy放弃最旧的未处理请求,执行新传入的任务DiscardPolicy不做任何操作,放弃新任务BlockingQueueput、take生产者与消费者(工作队列与线程池)新的请求超过线程池的处理能力,将请求放在队列中,而不是竞争CPU资源的线程队列,避免耗尽资源的情况出现ArrayBlockingQueue、LinkedBlockingDeque、SynchronousQueue注:如果任务之间有依赖,有限队列可能引起线程饥饿和死锁问题。各种线程池线程池SingleThreadPoolCach

6、edThreadPoolFixedThreadPoolcoolPoolSize10---maxPoolSize1Integer.MAX_VALUE---QueueLinkedBlockingQueueSynchronousQueueLinkedBlockingQueuehandlerAbortPolicyAbortPolicyAbortPolicykeepAliveTime060min0线程池两种常用策略:1、小池+大队列控制对CPU以及内存的使用,减少线程上下文切换2、大池+无队列大吞吐量、高效的移交任务WA使用Spr

7、ing封装的线程池ThreadPoolTaskExecutorcoolPoolSize:5maxPoolSize:5Queue:LinkedBlockingQueue10000Handler:AbortPolicy批量执行下,需要记录每个线程是否执行完毕,来控制主线程是否继续下一个批量的执行第二个问题计数器???并发???synchronized???AtomicInteger“可以用原子方式更新的int值。”CAS(CompareAndSet)volatile(线程可见性)非阻塞算法(乐观锁)privatevolati

8、leintvalue;publicfinalintget(){        returnvalue;    }publicfinalintincrementAndGet(){    for(;;){        intcurrent=get();        intnext=current+1;        

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。