JUC进阶

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

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

通俗来讲就是你大爷还是你大爷,你大妈已经不是你大妈了^_^(他已经被动过了)代码实现JUC进阶

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

它被人动过,版本号就不是原来的版本号了25、各种锁的理解1、公平锁和非公平锁JUC进阶

2、可重入锁(递归锁)JUC进阶JUC进阶JUC进阶

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

JUC进阶

上一篇:1057 数零壹 (20 point(s))


下一篇:textbox 实现跨操作系统换行的两种写法