![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并发
laoxilaoxi_
码农,邮箱laoxilaoxi@foxmail.com
展开
-
《Java并发编程实战》4.高级主题
十三、显式锁 1)Lock与ReentrantLock void lock(); 获取锁,未获取到则阻塞。 void lockInterruptibly() throws InterruptedException;获取锁,未获取到则阻塞,阻塞可中断。 boolean tryLock();获取锁,返回是否获取到 boolean tryLock(long time, TimeUnit unit) throws InterruptedException;获取锁,不能立即...原创 2020-05-11 11:24:46 · 112 阅读 · 0 评论 -
《Java并发编程实战》3.活跃性、性能与测试
十、避免活跃性危险 1)死锁 死锁的产生:A线程持有锁1,尝试获取锁2,同时B线程持有锁2,尝试获取锁1。 避免死锁:使用支持定时的锁;控制锁顺序;多个锁转为1个锁。jstack -l pid可查看死锁。 2)饥饿:某个线程一直获取不到它所需要的资源,导致线程饥饿。常见的是cpu饥饿,一般不设置线程的优先级(因为本身也不是很靠谱)。 3)活锁:因为某些原因导致线程一直执行一个重复的操作。例如MQ的消费消息失败导致消息放回了MQ,然后又被消费到,如此循环。可以适当设置重试策略防止这种...原创 2020-05-11 11:23:27 · 103 阅读 · 0 评论 -
《Java并发编程实战》2.结构化并发应用程序
六、任务执行 Executor框架 1)线程池 newSingleThreadExecutor 一个线程 newFixedThreadPool 固定大小线程池 newCachedThreadPool 缓冲线程池 newScheduledThreadPool 延迟或定时线程池 2)Executor生命周期 ExecutorService继承了Executor,扩展了其生命周期的管理方法。其生命周期状...原创 2020-05-11 11:22:28 · 107 阅读 · 0 评论 -
《Java并发编程实战》1.基础知识
二、什么是线程安全 当多个线程访问某个类时,不管运行时采用的何种调度方式或者这些线程如何交替执行,并且再主调度代码也不需要任何额外的同步或者协同,这个类能表现出正确的行为,那么这个类就是线程安全的。 三、对象共享 线程封闭 栈封闭:栈封闭中,只能通过局部变量才能访问对象。 ThreadLocal类:使用ThreadLocal存储变量。 只读共享 不可变:对象不能修改,对象的所有域是final,对象创建时没有逸出。 线程安全共享 ...原创 2020-05-11 11:21:30 · 113 阅读 · 0 评论