我们通常在面试中大量遇到的手撕代码的题无非就是以下几种:
死锁,几种排序算法(最常考的快速排序,归并排序),生产者消费者模式,单例模式
在多线程这边,我们通常需要掌握生产者消费者模式,生产者消费者模式我们可以用sychronized版本写,更加高阶的可以用Reentranlock版本+condition(条件变量)来写。
为了达到精准通知的目的,我们还可以使用ReentrantLock版本+多个condition(条件变量来写)。
sychronized版本:
public class Demo01 {
public static void main(String[] args) {
Data data = new Data();
new Thread(()->{
for(int i =0;i<10;i++) {
try {
data.increment();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
},"线程A").start();
new Thread(()->{
for(int i =0;i<10;i++) {
try {
data.decrement();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
},"线程B").start();
new Thread(()->{
for(int i =0;i<10;i++) {
try {
data.increment();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
},"线程C").start();
new Thread(()->{
for(int i =0;i<10;i++) {
try {
data.decrement();
} catch (InterruptedException e) {
e.printStackTrace();