java多线程学习总结

来源:互联网 发布:数组转化为json字符串 编辑:程序博客网 时间:2024/06/05 16:29

多线程首先遇到的第一个问题是并发问题:在多线程访问共有内存数据(即类与对象所持有字段与方法,不包括非静态方法内的对象)会出现的问题。即下图红色部分。


而面对并发问题。我们通常只能使用synchronize(内置锁)或者Lock锁(显示锁),这样我们才能保证在同一个时刻同一块内存只有一个线程去操作,这样保证了数据的正确性。但是这也带来了效率低下的问题。同一时刻同一个内存区域只能由一个线程去操作。但是当对一些Integer、Boolean、Long、IntegerArray、LongArray、Reference等提供了Atomic包,即AtomicInteger等等。这样,我对这些对象进行增删减操作时就可以不用Synchronize与Lock了。Lock与Atomic所用知识点如下:



1、JDK线程池用到上面所有知识点;点击打开链接

2、AQS(AbstractQueuedSynchronizer):队列同步器。使用了一个int成员变量status来表示同步状况,是用来构建锁或者其他同步组中的基础框架。点击打开链接

3、同步队列,AQS所用;点击打开链接

4、CAS(Compare and Swap):比较并交换,通过利用底层硬件平台的特性,实现原子性操作。点击打开链接

5、Unsafe:提供了硬件级别的原子操作;点击打开链接

6、Volatile:保证变量可见性;点击打开链接

上述技术要点解决了并发编程中的原子性、可见性、有序性。


线程的休眠与唤醒机制:





原创粉丝点击