美文网首页
Java并发编程思想&Java多线程编程核心技术 读书笔

Java并发编程思想&Java多线程编程核心技术 读书笔

作者: ChasonC | 来源:发表于2018-02-27 15:37 被阅读157次

Java并发编程思想

1、ConcurrentHashMap通过分段锁实现线程间共享,内部使用了包含16个锁的数组。

2、Excutors默认的四种创建线程池方式
newFixedThreadPool:长度固定。
newCachedThreadPool:线程规模不受限制,当前规模超过处理需求,回收空闲线程。
newSingleThreadExcutor:单线程线程池。
newScheduledThreadPool:固定长度线程池,以延迟或定时的方式执行,类似Timer。

3、ExcuterService扩展Excutor接口,解决任务执行生命周期问题。

4、ExcutorService:
shutdown:不接受新任务且队列中任务已执行完毕时关闭。
shutdownNow:立即关闭。

5、Excutor中一个任务将另一个任务提交至线程池,并等待其返回结果,可能发生饥饿死锁。

6、如果线程池中线程数远小于在稳定状态下执行时间较长的任务数量,线程池执行性能将会降低。

7、对于计算密集型任务,在Ncpu个处理器系统上,线程池大小为Ncpu+1时,通常能实现最优利用率。

8、newFixedThreadPool和newSingleThreadExcutor默认使用无界的LinkedBlockingQueue。

9、任务相互独立时,为线程池或工作队列设置界限才是合理的,若任务间相互依赖,有界线程池或队列可能导致饥饿死锁。

10、如果再循环中包含了密集计算或可能阻塞的IO操作,那么只要每次迭代是独立的,都可以对其进行并行化。

11、持有锁的情况下,调用某个外部方法,可能出现线程活跃性问题。外部方法可能会获取其他锁,或长时间阻塞,导致其他线程无法获取当前被持有的锁。

12、多线程主要是为了发挥多个处理器的处理能力,对问题进行有效的并行分解,使得程序能更有效的使用这种能力。

13、Amdahl定律:在增加计算机资源的情况下,程序理论上能实现的最高加速比,这个值取决于程序中可并行部分与穿行部分所占的比重。

14、降低发生竞争可能性的一种有效的方式就是尽可能缩短锁持有时间。

15、tryLock可实现可定时、可轮询的锁获取模式,与无条件锁获取模式相比,他有更完善的错误恢复机制。

16、大多数情况下,非公平锁性能优于公平锁。

17、当持有锁相对时间较长,或请求锁的平均时间间隔较长,那么应该使用公平锁。

18、当一个变量依赖于其他变量,或变量的新值依赖于旧值时,就不能使用volatile。

19、12个原子变量类,分四组:标量类(AtomicInteger \ AtomicLong \ AtomicBoolean \ AtomicReference)、更新器类、数组类(只支持Integer \ Long \ Reference)、复合变量类。

Java多线程编程核心技术

20、使用Stop释放锁将会造成数据不一致的结果。

21、建议使用“抛异常”终止线程(interrupt方法)。

22、yield()作用放弃当前CPU资源,让别的任务重新参与CPU资源竞争。

23、线程的优先级具有继承性。

24、A持有Object锁,B可以异步方式调用Object非同步方法,但调用Object同步方法时需等待,即同步调用。

25、重入锁表现为所对象同步方法间的调用,在父子类继承环境中也支持。

26、代码出现异常时,锁自动释放。

27、同步不可以继承。

28、同步方法对当前对象加锁,同步块对某个对象加锁。

29、将任何数据作为所对象时,多个线程同时持有相同所对象,则这些线程之间就是同步的;若持有不同的所对象,则这些线程是异步的。

30、volatile保证的是数据可见性,synchnoized保证原子性和可见性;多线程访问volatile不会阻塞,synchronize会阻塞。

31、调用wait之前需先获得对象锁。

32、多生产者,通过notifyAll解决同类唤醒假死问题;多消费者,通过循环判断条件解决判断条件变化问题。

33、Join方法作用是等待线程对象销毁,使线程间排队执行。

34、Join内部使用wait实现,所以Join具有释放锁的特点。

35、InheritableThreadLocal可以在子线程中取得父线程继承下来的值。子线程取值时,父线程修改值,子线程取得旧值。

相关文章

网友评论

      本文标题:Java并发编程思想&Java多线程编程核心技术 读书笔

      本文链接:https://www.haomeiwen.com/subject/abkmxftx.html