2019面试题
2019面试题小笔记,解析高频题目
ABU_MOlI_ITUI
这个作者很懒,什么都没留下…
展开
-
JUC之锁绑定多个条件Condition
锁绑定多个条件Conditionpackage Lock;/** 题目:多线程之间按顺序调用,实现A->B->C->三个线程启动,要求如下* AA打印5次,BB打印10次,CC打印15次* 接着* AA打印5,BB打印10次,CC打印15次* 来10轮* *///线程操纵资源类import java.util.concurrent.locks.Cond...原创 2019-12-20 15:31:04 · 5284 阅读 · 0 评论 -
JUC之Synchronized和Lock有什么区别
Synchronized和Lock有什么区别?用新的lock有什么好处?前者是Java的关键字后者是Java5以后新开发的类1.原始构成Synchronized是关键字属于JVM层面monitorenter进(底层是通过monitor对象来完成,其实wait、notify等方法也依赖于monitor对象只有在同步块或方法中才能调用wait、notify等方法)monitorexit出...原创 2019-12-20 08:27:22 · 5372 阅读 · 0 评论 -
JUC之线程通信之生产者消费者传统版
线程通信之生产者消费者传统版用于哪里一、生产者消费者1.传统版2.阻塞队列版package Lock;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;...原创 2019-12-20 08:24:37 · 5195 阅读 · 0 评论 -
JUC之阻塞队列
阻塞队列1、队列+阻塞队列队列----先到先得阻塞队列-----首先它是一个队列,而一个阻塞队列在数据结构中所起的作用大致如图当阻塞队列是空的时候,从队列中获取元素的操作将会被阻塞当阻塞队列是满的时候,往队列中添加元素的操作将会被阻塞试图从空的阻塞队列中获取元素的线程将会被阻塞,直到其他线程往空的队列插入新的元素同样试图往已满的阻塞队列中添加新元素的线程同样也会被阻...原创 2019-12-17 11:18:14 · 5194 阅读 · 0 评论 -
JUC之SemaphoreDemo
SemaphoreDemo信号量主要用于俩个目的,一个是用于多个共享资源的互斥使用,另一个用于并发线程数的控制。package Lock;import java.util.concurrent.Semaphore;import java.util.concurrent.TimeUnit;public class SemaphoreDemo { public static...原创 2019-12-16 18:45:55 · 5181 阅读 · 0 评论 -
JUC之CyclicBarrier
CyclicBarrierCyclicBarrier的字面意思是可循环(Cyclic)使用的屏障(Barrier)。它要做的事情是,让一组线程到达一个屏障(也可以叫同步起点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续干活,线程进入屏障通过CyclicBarrier的await()方法。它是做加法。package Lock;import jav...原创 2019-12-16 17:17:58 · 5100 阅读 · 0 评论 -
JUC之CountDownLatch
CountDownLatch----倒计数countDownLatch这个类使一个线程等待其他线程各自执行完毕后再执行。 是通过一个计数器来实现的,计数器的初始值是线程的数量。每当一个线程执行完毕后,计数器的值就-1,当计数器的值为0时,表示所有线程都执行完毕,然后在闭锁上等待的线程就可以恢复工作了。package Lock;import java.util.concurrent.C...原创 2019-12-16 16:56:55 · 5128 阅读 · 0 评论 -
JUC之读写锁
读写锁理论独占锁(写锁):指该锁一次只能被一个线程所持有。对ReentrantLock和Synchronized而言都是独占锁共享锁(读锁):指该锁可被多个线程所持有。对ReentrantReadWriteLock其读锁是共享锁,其写锁是独占锁读锁的共享锁可保证并发读是非常高效的,读写,写读,写写的过程是互斥的。在多线程、高内聚,低耦合下,操纵资源类三个方法:读...原创 2019-12-12 13:54:48 · 5147 阅读 · 0 评论 -
JUC之自旋锁
自旋锁(spinlock):是指尝试获取锁的线程不会立即阻塞,而是采用循环的方式去尝试获取锁,这样的好处是减少线程上下文切换的消耗,缺点是循环会消耗CPU问题:手写一个自旋锁题目:实现一个自旋锁自旋锁好处:循环比较获取直到成功为止,没有类似wait的阻塞通过CAS操作完成自旋锁,A线程先进来调用myLock方法自己持有锁5秒钟,B随后进来后发现当前有线程持有锁,不是null...原创 2019-12-11 16:53:01 · 5366 阅读 · 0 评论 -
JUC之可重入锁(递归锁)
可重入锁(又名递归锁)理论指的是同一线程外层函数获得锁之后,内层递归函数仍然能够获得该锁的代码在同一个线程在外层方法获取锁的时候,在进入内层方法会自动获取锁也就是说,线程可以进入任何一个它已经拥有的锁所同步着的代码块ReentrantLock/synchronized就是一个典型的可重入锁作用:避免死锁代码synchronized就是一个典型的可重入锁案例pa...原创 2019-12-11 15:52:05 · 5248 阅读 · 0 评论 -
JUC之公平锁与非公平锁
公平锁与非公平锁首先,公平锁与非公平锁谈谈你的理解?1.公平和非公平锁是什么?公平锁:是指多个线程按照申请锁的顺序来获取锁,类似排队打饭,先来后到非公平:是指多个线程获取锁的顺序并不是按照申请锁的顺序来获取锁,有可能后申请的线程比先申请的线程优先获取锁 在高并发的情况下,有可能会造成优先级反转或者饥饿现象并发包中ReentrantLock的创建可以指定...原创 2019-12-11 09:25:49 · 5242 阅读 · 0 评论 -
JUC多线程及高并发-----volatile
JUC多线程及高并发JUC----Java.util.concurrentlyconcurrently------高并发原创 2019-11-27 19:44:57 · 5264 阅读 · 0 评论 -
JUC多线程及高并发12---集合类不安全Map
集合类不安全Mappackage ArrayList;import java.util.*;import java.util.concurrent.CopyOnWriteArraySet;public class ContainerNotSafeDemo1 { public static void main(String[] args) {// Set<...原创 2019-12-09 18:51:47 · 5177 阅读 · 0 评论 -
JUC多线程及高并发11---集合类不安全set
集合类不安全set.flvHashSet<>package ArrayList;import java.util.HashSet;import java.util.Set;import java.util.UUID;public class ContainerNotSafeDemo1 { public static void main(String[] ...原创 2019-12-09 18:43:28 · 5225 阅读 · 0 评论 -
JUC多线程及高并发10---集合类不安全
集合类不安全之并发修改异常问题:我们知道ArrayList是线程不安全,请编码写一个不安全的案例并给出解决方案。package ArrayList;import java.util.ArrayList;/** 集合类不安全的问题* ArrayList* */public class ContainerNotSafeDemo { public static void...原创 2019-12-09 16:39:33 · 5370 阅读 · 0 评论 -
JUC多线程及高并发9-----ABA
面试笔记CAS-----》UNsafe------》CAS底层思想--------》ABA-------》原子引用更新--------------》如何规避ABA问题CAS 会导致“ABA问题”CAS算法实现一个很重要前提需要取出内存中某个时刻的数据并在当下时刻比较并替换,那么在这个时间差类会导致数据的变化。比如说一个线程one从内存位置V中取出A,这时候另一个线程two也从...原创 2019-12-05 09:01:31 · 5167 阅读 · 0 评论 -
JUC多线程及高并发8-----CAS
面试题笔记3其中var1 ------Atomicinteger 对象本身 var2---------该对象值得引用地址 var4---------需要变动的数量 var5----------是用过var1 var2找出的主内存中真实的值用该对象当前的值 与var5比较如果相同,更新var5+var4并且返回true如果不同,继续取...原创 2019-12-04 16:01:20 · 5191 阅读 · 0 评论 -
JUC多线程及高并发7-----CAS
面试题笔记2问题1,CAS底层原理?1,自旋锁2,UnSafe理解首先要知道用getAndIncrement();这一个方法就可以代替synchronized,也能保证原子性atomicInteger.getAndIncrement();1.Unsafe 是CAS的核心类,由于Java方法无法直接访问底层系统,需要通过本地(n...原创 2019-12-04 11:18:48 · 5168 阅读 · 0 评论 -
JUC多线程及高并发6-----CAS
面试题笔记1问题CAS是什么?--------------compareAndSet是比较和交换括号里一个为期望值,一个为更新值public final boolean compareAndSet(int expect, int update) 就是说,假设主内存数据为5,然后线程读取数据5与自己的期望值进行比较,如果一致将会修改(与主内存交换值)为更新值2019,在传入到主...原创 2019-12-03 16:18:50 · 5231 阅读 · 0 评论 -
JUC多线程及高并发5-----volatile
面试题笔记5问题:谈谈你在那些地方用过volatile?分俩个方面:1.单例模式DCL代码:之前的单例模式:懒汉式,饿汉式。下面举例:一个线程访问:package jMM;public class SingletonDemo { //1,主类 private static SingletonDemo instance =null; //2,构造...原创 2019-12-03 14:57:05 · 5160 阅读 · 0 评论 -
JUC多线程及高并发4-----volatile
JMM-----有序性(volatile禁止指令重排)(面试题笔记4)JMM---有线程安全性获得保证计算机在执行程序时,为提高性能,编译器和处理器常常会对指令做重排,一般分以下三种源代码----》编译器优化重排-----》指令并行的重排-----》内存系统的重排-----》最终执行的指令单线程环境里面确保程序最终执行结果和代码顺序执行结果一致处理器在进行重排序时必须要考虑指令之...原创 2019-12-02 09:46:15 · 5200 阅读 · 0 评论 -
JUC多线程及高并发3-----volatile
你的同学在学习,你的对手在磨刀,你的闺蜜在减肥,你还等什么?JMM-----原子性代码证明(面试题笔记3)package jMM;import java.util.concurrent.TimeUnit;//1.public class Jmm_kejianxing { volatile int number =0; //原主机的数据 publ...原创 2019-11-29 13:07:33 · 5236 阅读 · 0 评论 -
JUC多线程及高并发2-----volatile
JMM-----可见性代码证明(面试题笔记2)2.请谈谈JMM可见性(VolatileDemo代码演示)原子性(VolatileDemo代码演示)有序性2.1可见性(VolatileDemo代码演示)对比新建项目Java工程package jMM;import java.util.concurrent.TimeUnit;//1.public class Jmm_ke...原创 2019-11-28 19:44:19 · 5273 阅读 · 0 评论