【笔记】Java栅栏

前言

java.util.concurrent.CyclicBarrier类是一种同步机制,它能够对处理一些算法的线程实现同步,所有线程必须等待的一个栅栏,直到所有线程都达到这里,然后所有线程才可以继续作其他事情

创建一些类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
class Horse1 implements Runnable {

private CyclicBarrier cyclicBarrier;

public Horse1(CyclicBarrier cyclicBarrier) {
this.cyclicBarrier = cyclicBarrier
}

@Override
public void run() {
System.out.println("赛马1来到栅栏前");
// 此方法每次调用,栅栏的计数器会减1
// 此方法产生阻塞,阻塞的开放条件是栅栏的计数器等于0
cyclicBarrier.await();
System.out.println("赛马1开始跑");
}
}

class Horse2 implements Runnable {

private CyclicBarrier cyclicBarrier;

public Horse2(CyclicBarrier cyclicBarrier) {
this.cyclicBarrier = cyclicBarrier
}

@Override
public void run() {
System.out.println("赛马2来到栅栏前");
// 此方法每次调用,栅栏的计数器会减1
// 此方法产生阻塞,阻塞的开放条件是栅栏的计数器等于0
cyclicBarrier.await();
System.out.println("赛马2开始跑");
}
}

在主方法中创建并使用栅栏

<num>:等待的线程的数量

1
2
3
4
5
6
public static void main(String[] args) {
// 创建栅栏对象
CyclicBarrier cyclicBarrier = new CyclicBarrier(<num>);
new Thread(new Horse1(cyclicBarrier));
new Thread(new Horse2(cyclicBarrier));
}

完成