Java并发编程实践分享.ppt

上传人:小飞机 文档编号:5575450 上传时间:2023-07-29 格式:PPT 页数:30 大小:333.50KB
返回 下载 相关 举报
Java并发编程实践分享.ppt_第1页
第1页 / 共30页
Java并发编程实践分享.ppt_第2页
第2页 / 共30页
Java并发编程实践分享.ppt_第3页
第3页 / 共30页
Java并发编程实践分享.ppt_第4页
第4页 / 共30页
Java并发编程实践分享.ppt_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《Java并发编程实践分享.ppt》由会员分享,可在线阅读,更多相关《Java并发编程实践分享.ppt(30页珍藏版)》请在三一办公上搜索。

1、Java并发编程实践分享 WA定时器编程经验分享,cesc.wangl,以下方法哪个是线程安全,第一个方法:public void add(int i)i+;,第二个方法:public Object getLast(List list)int lastIndex=list.size()-1;return list.get(lastIndex);,第三个方法:public Object getLast(Vector v)int lastIndex=v.size()-1;return v.get(lastIndex);,第一个方法:private static void testList()Lis

2、t tests=new ArrayList();tests.add(a);tests.add(b);tests.add(“temp);tests.add(c);for(String test:tests)if(test.equals(b)tests.remove(“temp);System.out.println(test);,第二个方法:private static void testVector()Vector tests=new Vector();tests.add(a);tests.add(b);tests.add(“temp);tests.add(c);for(String test

3、:tests)if(test.equals(b)tests.remove(“temp);System.out.println(test);,执行结果什么?,JUC简介线程池AtomicLock并发编程注意事项,JDK1.5新增的类库提供并发编程中很常用的实用工具类,线程池选哪个?多少线程合适?多大的队列合适?,第一个问题,ThreadPoolExecutorExecutorsBlockingQueue,corePoolSize/核心池的大小maxPoolSize/最大池的大小keepAliveTime/超时时间workQueue/等待队列handler/饱和策略corePoolSize=CPU

4、个数+1(计算密集型的操作)(Java Concurrency In Practice)AbortPolicy 抛异常RejectedExecutionException CallerRunsPolicy 调度者执行 DiscardOldestPolicy放弃最旧的未处理请求,执行新传入的任务 DiscardPolicy 不做任何操作,放弃新任务,BlockingQueueput、take生产者与消费者(工作队列与线程池)新的请求超过线程池的处理能力,将请求放在队列中,而不是竞争CPU资源的线程队列,避免耗尽资源的情况出现ArrayBlockingQueue、LinkedBlockingDeq

5、ue、SynchronousQueue注:如果任务之间有依赖,有限队列可能引起线程饥饿和死锁问题。,各种线程池,线程池两种常用策略:1、小池+大队列控制对CPU以及内存的使用,减少线程上下文切换2、大池+无队列大吞吐量、高效的移交任务WA使用Spring封装的线程池ThreadPoolTaskExecutorcoolPoolSize:5maxPoolSize:5Queue:LinkedBlockingQueue 10000Handler:AbortPolicy,批量执行下,需要记录每个线程是否执行完毕,来控制主线程是否继续下一个批量的执行,第二个问题,计数器?并发?synchronized?,

6、AtomicInteger“可以用原子方式更新的 int 值。”CAS(Compare And Set)volatile(线程可见性)非阻塞算法(乐观锁),private volatile int value;public final int get()return value;public final int incrementAndGet()for(;)int current=get();int next=current+1;if(compareAndSet(current,next)return next;,CPU,core1,core2,CPU,core1,core2,CPU,core

7、1,core2,synchronized与非阻塞算法1、使用硬件的原生指令,降低了争用的成本2、在轻度与中度争用情况下,更有性能优势3、重度争用时阻塞算法性能更好,但是重度的争用往往说明算法需要调整,CountDownLatch(闭锁)确保特定的活动直到其他活动完成后才发生 CountDownLatch(int)await()countDown(),public static void finishOneTask()latch.countDown();public static void isFinish()throws InterruptedException latch.await();p

8、ublic static void init(int initNum)latch=new CountDownLatch(initNum);,第三个问题,如何精确控制发送速率?,synchronizedLockReentrantLock,synchronized与Lock比较,1、Lock与synchronized功效是一样的2、Lock提供更好的灵活度和可伸缩性3、在Java1.5中Lock的性能明显强于synchronized,1.6中差距不明显4、使用Lock一定要记住在finally释放锁,ReentrantLock lock=LimitSendNumUtil.getLock();try

9、 lock.lock();if(!LimitSendNumUtil.isSend()/线程sleepThread.sleep(sleepTime);AliMailClient.synSend(mail);finally LimitSendNumUtil.send();if(lock.isLocked()lock.unlock();,并发容器,ConcurrentHashMap线程安全支持并发、无阻塞锁分离volatile、读不加锁较HashMap,高并发情景下(50-100线程并发)添加和删除性能提高一倍,查找性能提高10倍,并发编程注意事项,1、线程设置名称2、Atomic+Atomic!=

10、Atomic3、响应中断InterruptedException4、不要误杀线程(运行定时器时要使全部线程都结束才可以退出)5、编写多线程程序,要加相关注释(方法是否线程安全、适用在那种场景使用此类或方法)6、使用Lock要在finally中释放Lock7、使用volatile只能增加可见性,没有同步语义8、调试Java多线程代码的指令jpsjstack pidvisualvm(图形界面),误吃掉中断的后果,InterruptedException 1、中断是一种协作机制,其他线程不能够迫使其他线程停止。2、中断可以认为是“提醒”。3、响应中断的阻塞方法可以更容易的取消耗时的操作。响应线程中断

11、的两种方式:1、传递InterruptedException2、恢复中断Thread.currentThread().interrupt(),Thread 7371:(state=BLOCKED)-java.lang.Object.wait(long)bci=0(Compiled frame;information may be imprecise)-java.lang.Object.wait()bci=2,line=474(Compiled frame)Thread 7357:(state=IN_NATIVE)-org.eclipse.swt.internal.gtk.OS.Call(int

12、,int,int,int)bci=0(Compiled frame;information may be imprecise)-org.eclipse.swt.widgets.Display.sleep()bci=265,line=3893(Compiled frame)-org.eclipse.ui.application.WorkbenchAdvisor.eventLoopIdle(org.eclipse.swt.widgets.Display)bci=1,line=364(Compiled frame)-org.eclipse.ui.internal.Workbench.runUI()bci=393,line=2369(Interpreted frame),Thanks,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号