Bootstrap

2024年最全2024面试官会经常问到的三个并发工具类,你都知道吗?,2024年Java开发者跳槽指南

最后

总而言之,面试官问来问去,问的那些Redis知识点也就这么多吧,复习的不够到位,知识点掌握不够熟练,所以面试才会卡壳。将这些Redis面试知识解析以及我整理的一些学习笔记分享出来给大家参考学习

还有更多学习笔记面试资料也分享如下:

都是“Redis惹的祸”,害我差点挂在美团三面,真是“虚惊一场”

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

CyclicBarrier初始时还可带一个Runnable的参数, 此Runnable任务在CyclicBarrier的数目达到后,所有其它线程被唤醒前被执行。

package cn.enjoy.mt;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
class Writer extends Thread {
private CyclicBarrier cbr;
public Writer(CyclicBarrier cbr) {
this.cbr = cbr;
}
@Override
public void run() {
try {
System.out.println(“线程” + Thread.currentThread().getName() + “,正在写入数据”);
Thread.sleep(3000);
System.out.println(“线程” + Thread.currentThread().getName() + “,写入数据成功…”);
cbr.await();
System.out.println(“所有线程执行完毕…”);
} catch (Exception e) {
e.printStackTrace();
}
}

}
public class CyclicBarrierTest {
public static void main(String[] args) {
CyclicBarrier cyclicBarrier = new CyclicBarrier(5);
for (int i = 0; i < 5; i++) {
Writer writer = new Writer(cyclicBarrier);
writer.start();
}
}
}

1.3. **(**计数信号量)Semaphore

Semaphore是一种基于计数的信号量。

它可以设定一个阈值,基于此,多个线程竞争获取许可信号,做自己的申请后归还,超过阈值后,线程申请许可信号将会被阻塞。

Semaphore可以用来构建一些对象池,资源池之类的,比如数据库连接池,我们也可以创建计数为1的Semaphore,将其作为一种类似互斥锁的机制,这也叫二元信号量,表示两种互斥状态。它的用法如下:

availablePermits函数用来获取当前可用的资源数量

wc.acquire(); //申请资源

wc.release();// 释放资源

需求: 一个按摩店只有3个技师,但是有10个老司机来按摩,那怎么办?

假设10的人的编号分别为1-10,并且1号先到技师,10号最后到技师。那么1-3号来的时候必然有可用的技师,顺利按摩,4号来的时候需要看看前面3人是否有人按摩完成出来了,如果有人出来,进去按摩,否则等待。

同样的道理,4-10号也需要等待正在上按摩的人出来后才能进去按摩,代码:

package cn.enjoy.mt;

import java.util.Random;
import java.util.concurrent.Semaphore;

class UserThrad extends Thread {
private String name;
private Semaphore jsShop;

public UserThrad(String name, Semaphore jsShop) {
this.name = name;
this.jsShop = jsShop;
}

@Override
public void run() {
// 剩下的技师
int availablePermits = jsShop.availablePermits();
if (availablePermits > 0) {
System.out.println(name + “,找到小姐姐按摩了…”);
} else {
System.out.println(name + “,真可惜,还得等…”);
}
try {
// 申请技师
jsShop.acquire();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(name + “开始按摩咯” + “,剩下的技师数:” + jsShop.availablePermits());
try {
Thread.sleep(new Random().nextInt(1000));
} catch (Exception e) {

}
System.out.println(name + “按摩完咯!,舒服”);
// 释放技师
jsShop.release();
}
}

public class SemaphoreTest {

public static void main(String[] args) {
Semaphore semaphore = new Semaphore(4);
for (int i = 1; i <= 10; i++) {
UserThrad userThrad = new UserThrad(“第” + i + “个人”, semaphore);
userThrad.start();
}
}

}

最后,这里小on也给大家整理了一份Java进阶宝典《Java核心知识点整理.pdf》,全文覆盖了JVM、锁、高并发、反射、mybatis、Spring原理、微服务、Zookeeper、数据库、数据结构等等一系列的知识点,今天限时免费发放,获取方式~ 下方评论区留言:java宝典 即可领取哦!

最后

无论是哪家公司,都很重视基础,大厂更加重视技术的深度和广度,面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。

针对以上面试技术点,我在这里也做一些分享,希望能更好的帮助到大家。

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**

需要这份系统化的资料的朋友,可以点击这里获取

;