首页 > 其他 > 详细

JUC进阶

时间:2021-09-06 00:18:38      阅读:33      评论:0      收藏:0      [点我收藏+]

1、基础2.线程和进程:技术分享图片技术分享图片1.线程六个状态:技术分享图片2.wait和sleep的区别:技术分享图片3、Lock锁(重点)传统 Synchronized:不公平锁Lock接口:技术分享图片公平锁:十分公平:可以先来后到非公平锁:十分不公平:可以插队 (默认)Synchronized 和 Lock 区别:1、 Synchronized 内置的Java关键字, Lock 是一个Java类2、 Synchronized 无法判断获取锁的状态,Lock 可以判断是否获取到了锁3、 Synchronized 会自动释放锁,lock 必须要手动释放锁!如果不释放锁,死锁4、 Synchronized 线程 1(获得锁,阻塞)、线程2(等待,傻傻的等);Lock锁就不一定会等待下去;5、 Synchronized 可重入锁,不可以中断的,非公平;Lock ,可重入锁,可以 判断锁,非公平(可以自己设置);6、 Synchronized 适合锁少量的代码同步问题,Lock 适合锁大量的同步代码! 4、生产者和消费者问题 技术分享图片面试的:单例模式、排序算法、生产者和消费者、死锁生产者和消费者问题 Synchronized 版解决if用While5.lock与Synchronized对应的方法:技术分享图片Synchronized:技术分享图片(重):多个线程用同一个对像,调用同一个类被Synchronized锁的方法,变量,线程都只能一个一个来调用!多个线程如果用的是不同对像(不同的类),调用被Synchronized锁的方法,变量,线程不相干扰!static修饰的概念是类的模板,任何类还没加载就要先加载类它的模板,类的模板只有一个。如果被static(静态修饰),就算用不同的对象(名字)声明,static修饰的都是指向它唯一的类模板,只能一个一个调用6、Condition的使用lockd等待,唤醒方法:技术分享图片condition1.signal();唤醒condition1Lock-精准唤醒:技术分享图片7、List的安全List<String> list = new CopyOnwriteArrayList<>();技术分享图片8、Set的安全Set<string> set = new CopyOnwriteArrayset<>();技术分享图片9、map的安全Collections.synchronizedMap(Map<K,V> m) )可以代替HashMap,但是它们都是通过使用一个全局的锁来同步不同线程间的并发访问,因此会带来不可忽视的性能问题。Map<string, string> map = new ConcurrentHashMap<>();技术分享图片 ConcurrentHashMap是J.U.C(java.util.concurrent包)的重要成员,它是HashMap的一个线程安全的、支持高效并发的版本。在默认理想状态下,ConcurrentHashMap可以支持16个线程执行并发写操作及任意数量线程的读操作。本文将结合Java内存模型,分析JDK源代码,探索ConcurrentHashMap高并发的具体实现机制,包括其在JDK中的定义和结构、并发存取、重哈希和跨段操作,并着重剖析了ConcurrentHashMap读操作不需要加锁和分段锁机制的内在奥秘和原理。11、常用辅助类CountDownLatch线程减法计数器技术分享图片技术分享图片CyclicBarrier线程加法计数器技术分享图片技术分享图片Semaphore技术分享图片技术分享图片技术分享图片技术分享图片12、读写锁技术分享图片使用技术分享图片没有加锁时:技术分享图片结果技术分享图片读锁和写锁又名(独占锁和共享锁)技术分享图片结果技术分享图片总结技术分享图片13、阻塞队列队列和阻塞技术分享图片技术分享图片BlockingQueue技术分享图片技术分享图片技术分享图片技术分享图片1、抛出异常:技术分享图片技术分享图片2、返回Boolean值技术分享图片技术分享图片3、一直阻塞技术分享图片技术分享图片4、超时等待技术分享图片14、同步队列SynchronousQueueBlockingQueue<String> blockingQueue = new SynchronousQueue<>(); //同步队列技术分享图片技术分享图片结果:技术分享图片总结技术分享图片15、线程池Executors线程池Executors线程池三大方法1、单个线程池技术分享图片2、固定线程池技术分享图片3、可伸缩线程池技术分享图片三大方法本质技术分享图片ThreadPoolExecutor1、阿里巴巴规范手册说明技术分享图片2、ThreadPoolExecutor七大参数技术分享图片技术分享图片2、ThreadPoolExecutor四种拒接策略技术分享图片1、技术分享图片2、技术分享图片3、技术分享图片4、技术分享图片池大小设置优化技术分享图片1、CPU密集型技术分享图片2、IO密集型技术分享图片16、四大函数式接口技术分享图片1、Function函数式接口技术分享图片还能把括号去掉技术分享图片2、断定型接口技术分享图片技术分享图片3、Consumer消费型接口技术分享图片技术分享图片4、 Supplier供给型接口技术分享图片技术分享图片17、Stream流式计算(1.8新特性)技术分享图片18、ForkJoin技术分享图片1、ForkJoin的特点:工作窃取双端队列技术分享图片2、使用和对比技术分享图片使用三种方法计算1+到10亿的值1、普通For循环技术分享图片2、ForkJoin2.1、编写计算类技术分享图片技术分享图片2.2、创建ForkJoin工厂执行计算技术分享图片3、Stream流式计算一行代码技术分享图片4、结果技术分享图片19、异步回调CompletableFuture1、没有返回值()技术分享图片2、有返回结果(supplyAsync)技术分享图片20、JMM技术分享图片技术分享图片技术分享图片JMM的八种指令技术分享图片技术分享图片21、Volatile1、保持可见性缓存锁:总线加锁缓存一致性协议2、不保证原子性技术分享图片如:多线程调用num++;技术分享图片除了加锁lock和synchronized还有原子类可以保证原子性原子类CAS技术分享图片

实现技术分享图片技术分享图片技术分享图片3、避免指令重排技术分享图片技术分享图片Volatile的实现技术分享图片技术分享图片技术分享图片(2)禁止指令重排底层原理:
volatile实现禁止指令重排优化,从而避免多线程环境下程序出现乱序执行的现象。 先了解下概念,内存屏障(Memory Barrier)又称内存栅栏,是一个CPU指令,它的作用有两个:保证特定操作执行的顺序性;
保证某些变量的内存可见性(利用该特性实现volatile内存可见性)volatile实现禁止指令重排优化底层原理: 由于编译器和处理器都能执行指令重排优化。如果在指令间插入一条Memory Barrier则会告诉编译器和CPU,不管什么指令都不能和这条Memory Barrier指令重排,也就是说通过插入内存屏障,就能禁止在内存屏障前后的指令执行重排优化。内存屏障另外一个作用就是强制刷出各种CPU的缓存数据,因此任何CPU上的线程都能读取到这些数据的最新版本。左边:写操作场景:先LoadStore指令,后LoadLoad指令。右边:读操作场景:先LoadLoad指令,后LoadStore指令。技术分享图片
22、单例模式概念: java中单例模式是一种常见的设计模式,单例模式的写法有很多种,比较常见的有三种:懒汉式、饿汉式、内部类、双重验证。
单例模式有以下特点:
1、单例类只能有一个实例(new 的对象)。
2、单例类必须自己创建自己的唯一实例。 3、单例类必须给所有其他对象提供这一实例。 单例模式确保该类只被是实例化一次,并且只能自己实例化自己。若想某一类不在类外被实例化,只需用private修饰符修饰其构造函数。1、饿汉式技术分享图片2、懒汉式技术分享图片技术分享图片3、静态内部类式技术分享图片
23、深入理解CAS技术分享图片AtomicInteger1、Unsafe类技术分享图片技术分享图片技术分享图片技术分享图片ABA问题技术分享图片技术分享图片

通俗来讲就是你大爷还是你大爷,你大妈已经不是你大妈了^_^(他已经被动过了)代码实现技术分享图片

解决办法如果线程one操作不被中断,那么问题就解决了将类变成原子类操作过程添加版本号即为下面的原子引用!24、原子引用AtomicStampedReference技术分享图片但是Integer类型的范围是-128~127,超出范围会在堆里面新建一个对象并不会复用对象你自己看一下源码compareAndSet源码,底层是用==进行判断带版本号的原子类技术分享图片技术分享图片技术分享图片

它被人动过,版本号就不是原来的版本号了25、各种锁的理解1、公平锁和非公平锁技术分享图片

2、可重入锁(递归锁)技术分享图片技术分享图片技术分享图片

可重入锁是指:某个线程已经获取了某个锁,那么他可以再次获取该锁而不陷入死锁总结下:什么是 "可重入",可重入就是说某个线程已经获得某个锁,可以再次获取锁而不会出现死锁。3、自旋锁技术分享图片技术分享图片4、死锁技术分享图片技术分享图片技术分享图片技术分享图片解开死锁,避免死锁产生的条件就可以了ThreadLocal的原理和使用场景技术分享图片技术分享图片区别:技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片 技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片技术分享图片111111111111

JUC进阶

原文:https://www.cnblogs.com/wanghhh/p/15228626.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!