并发基础篇:总结和思考题
进程和线程
Java线程和操作系统线程是1:1的关系。进程是应用程序的执行副本,是操作系统分配资源的最小单位。但是操作系统的计算资源是直接分配给线程的,线程是执行程序的最小单位。注意:只有内核线程才是真的具有执行能力的线程。
思考题:说说Java的线程都有哪些状态?
思考题:说说Java有协程吗?
CAS和原子操作
被问到CAS操作,一定要给出直指本质的回答。我一直强调直指本质,就是用简短的话说清楚它是做什么用的。如果是我,我可能会说,CAS是Java并发编程的基石,它是最基本的原子操作。CAS结构下,可以实现锁、信号量、CAS LOOP构造进步(区别于自旋锁见,并发高级篇Lock Free数据结构部分。)——这些都是最基本并发元语。
并发有3个重要问题要处理:原子性、可见性、有序性。CAS解决原子性,volatile解决可见性,happens-before原则保证有序性。
思考题:自旋锁是不是CAS LOOP ?反之呢?
同步器
同步器的内容特别的多,数据结构也多。
如果被问synchrnoized关键字,那就要提到Monitor。最好提到它的别名——intrinsic lock(内部所),提到用C++实现。而AQS走了另一条路径,是Java语言下给实现同步器的人的编程框架。假使没有AQS,大家就要会用LockSuppot、UnSafe这些底层类库。
如果被问到,AQS内部,可以结合无锁编程一起讨论一个Lock Free数据结构的实现。还有一种情况是被问到同步器,那就要准确说出场景。
思考题:什么场景下用CyclicBarrier?
所有的题目,可以先在答疑区留言,我会及时回复部分朋友的讨论。