Skip to content

并发基础篇:总结和思考题

进程和线程

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?

所有的题目,可以先在答疑区留言,我会及时回复部分朋友的讨论。

文章来源于自己总结和网络转载,内容如有任何问题,请大佬斧正!联系我