【Java面试经验】JUC部分(对应周阳老师的面试教程)

写在最前:此篇文章对应周阳老师的大厂面试教程,几乎包含了大厂所有JUC部分的面试题,虽然自己无缘大厂,但是这些知识也让我在面试中得到了不错的评价。
MarkDown文档下载地址:JUC面试
个人博客地址:http://www.zwmuzhi.cn/

结合另一篇文章食用更为妥当【Java面试经验】JAVA基础部分(从入门到放弃)

JUC

java.util.concurrent的缩写

线程的6种状态

创建,可运行,阻塞,等待,计时等待,终结

Lambda表达式

java1.8之后允许接口中有部分方法的实现,需要用default关键字描述方法

@FunctionalInterface 注解表示函数式接口(仅有一个抽象方法)

常见异常总结

ConcurrentModificationException:当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常

StackOverflowError:

多线程案例

C:\Users\WHB\AppData\Roaming\Typora\typora-user-images\image-20200513164544239.png

新老技术方案

JDK1.5中将Lock接口代替synchronized升级为显示的锁机制

lock代替了synchronized关键字,Condition进行通信

Condition.await()代替了wait

Condition.signal()代替了notify signal信号

Synchronized

Synchronized关键字,同一时间只能有一个进程进入类中的Synchronized方法,相当于对象锁

在这里插入图片描述

static synchronized 锁的是类(.class),锁的是类的模板

ConcurrentModificationException异常

原因:当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常

解决方案:

​ 1.可以使用Vector类,因为Vector中的add方法带有synchronized关键字

​ 2.Collections.synchronizedList 使用Collections工具栏把List变为线程安全

​ 3.使用JUC中的CopyOnWriteArrayList类,采用了写时复制的思想(读写分离),使用lock锁

在这里插入图片描述

在这里插入图片描述

HashSet

hashset底层是hashmap,hashset的构造方法其实就是new了一个hashmap,在执行add方法时,调用的是map的put方法,key为加入的值,value是一个默认值(PRERSEND常量)

public boolean add(E e) {
   
    return map.put(e, PRESENT)==null;
}
public HashSet() {
   
    map = new HashMap<>();
}

ArryList扩容为原来的一半,HashMap为原来的一倍

获取多线程的方式

1.继承Thread类

2.实现Runnble接口

3.实现Callable接口

Callable接口和Runnble接口的区别

1.Callable有返回值

2.Callable会有异常

3.Callable执行的是call方法,Runnble是run方法

Callable接口的get方法一般放在最后一行

CountDownLatch

  • countDownLatch这个类使一个线程等待其他线程各自执行完毕后再执行。

    是通过一个计数器来实现的,计数器的初始值是线程的数量。每当一个线程执行完毕后,计数器的值就-1,当计数器的值为0时,表示所有线程都执行完毕,然后在闭锁上等待的线程就可以恢复工作了

CyclicBarrier

  • 一个同步帮助,允许一组线程相互等待,以达到一个共同的障碍点。cyclicbarriers涉及一个固定大小的线程必须党偶尔互相等待程序是有用的。该障碍被称为循环,因为它可以在等待线程被释放后重新使用。
  • CountDownLatch做减法,CyclicBarrier做加法

Semaphore

在这里插入图片描述

ReadWriteLock

读写锁

BlockingQueue

在这里插入图片描述

在这里插入图片描述

  • 8
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值