欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用两个容量为1的阻塞队列实现同步通知的功能

程序员文章站 2024-02-27 15:54:27
...
package concurrency;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;

public class BlockingQueueCommunication {
public static void main(String[] args) {
final Business business = new Business();
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 1; i <= 10; i++) {
business.sub(i);
}

}
}).start();

for (int i = 1; i <= 10; i++) {
business.main(i);
}

}

static class Business {
final BlockingQueue<Integer> queue1 = new ArrayBlockingQueue<Integer>(1);
final BlockingQueue<Integer> queue2 = new ArrayBlockingQueue<Integer>(1);

// 匿名构造方法 (实例初始化)
{
try {
queue2.put(1);// 主线程后执行
} catch (InterruptedException e) {
e.printStackTrace();
}
}

public void sub(int i) {
try {
queue1.put(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
for (int j = 1; j <= 5; j++) {
System.out.println("sub thread sequece of " + j + ",loop of " + i);
}
try {
queue2.take();
} catch (InterruptedException e) {
e.printStackTrace();
}
}

public void main(int i) {
try {
queue2.put(1);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
for (int j = 1; j <= 5; j++) {
System.out.println("main thread sequece of " + j + ",loop of " + i);
}
try {
queue1.take();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
相关标签: ArrayBlockingQueue