《Java并发编程的艺术》读后感1100字
一本700多页的书,读了19.5个小时,当然光是读书中内容肯定用不到这么长时间,近一半的时间是用来做笔记,以及敲书中的代码;自己在并发编程知识一直空缺,所以这本书对自己而言还是蛮有用的,算是对Java的并发编程有一个整体的认识,部分技术细节原理也能够说得上来,但深入理解还需要大量的实践;可能是由于我实战经验不足,整本书给我的感觉属于“头重脚轻”型,前三章将的知识特别深,例如:sychronized和volatile关键字时已经涉及到了C的部分代码,而后面9章内容则相对较潜,例如线程池那块只是简单讲了它的组成元素(个人认为实际应用中线程池应该是用的最多的地方),可能是作者认为将前面的内容理解后后面的内容自然就理解了,所以后面部分的笔墨较少;如果有一个能够将书中大部分知识点串起来的例子就更好了;
读本书之前,你要问我并发编程,我可能零散的回答一些如:多线程的实现,然后再谈谈sychronized以及volatile关键字区别,线程的状态,线程之间的通讯等知识点。读完这本书之后,我会试着通过回答这几个问题来谈谈Java并发编程:
1 为什么要“并发”,“并发一定好吗”?- 为了充分利用CPU计算资源
- 并发多不一定好,因为线程之间的切换也需要一定的开销
- 通过继承Thread类
- 和实现runnable接口
- 谈谈两者实现方式的异同
保证安全性其实就是说:如何保证一个线程修改共享资源之后其他的线程能够看见这个线程的修(可见性)改,并且一个线程修改共享资源的操作是不可被打断的(原子性)。
- 可见性: 可以通过volatile关键字修饰共享资源得以保证
- 原子性:通过cas操作 ,以及锁
- 既能保证可见性又能保证原子性:通过锁实现
- synchronized重量级锁 可重入
- lock接口的实现锁 可重入,可中断
- 谈谈线程之间的通讯,wait()和 notify(); condition.await()和condition.signal()
本质上就是一个生产者和消费者模型;生产者是我们要执行的任务(由用户创建),消费者是执行这些任务的线程(由线程池创建的);
- 核心组成:最大线程数,核心线程数,线程最大空转时间,阻塞队列(用来存储任务的),拒绝策略。
- 思想上和现在很热的云计算如出一辙,只不过云计算的池子里存储的是计算,存储,网络资源,而线程池里面存储的是线程资源;当有任务来临时,我们先看看池子里有没有闲着的线程,如果有执行将这个任务拿去执行,否则,看当前线程数是否达到最大线程数量的,如果达到则看阻塞队列是否还有空间,没有则新建线程去执行该任务,如果没有则根据我们的拒绝策略采用一定的措施;当池子中的某一个线程完成任务后会主动去队列获取任务执行。
- 可以再谈谈具体四种线程池的区别,阻塞队列(通过锁实现)和非阻塞队列(通过cas操作实现)的区别以及实现原理,拒绝策略的具体内容等
编程路漫漫,需要学习的东西还有很多,加油!
转载请注明出处海之美文 » 《Java并发编程的艺术》读后感_1100字