Java 多執行緒應用 之 ArrayBlockingQueue
ArrayBlockingQueue,顧名思義是阻塞佇列,通過設定佇列的最大容量開來達到控制最多允許幾條執行緒再同時執行。還有幾個類也可以達到相同的效果。這是幾個月前看了下Java多執行緒應用的教程,好像是張孝祥的,翻到了之前寫的程式碼就貼出來。
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() {
public void run() {
for (int i = 1; i <= 4; i++) {
business.sub(i);
}
}
}).start();
new Thread(new Runnable() {
public void run() {
for (int i = 1; i <= 4; i++) {
business.main(i);
}
}
}).start();
}
// 說明:在這個靜態類裡定義兩個阻塞佇列,容量是1,來實現相互通知
// 需要開始往佇列1放東西,同時佇列2是阻塞的,那麼就需要初始化時往佇列2中放東西,讓其阻塞
// 往佇列1中放完東西后它會阻塞,執行完這個方法之前要讓佇列2中的東西取走,讓其不阻塞,然後就可以執行佇列2下面的程式碼
// 同樣道理,在佇列2所在的方法執行完之前要取走佇列1中的東西,讓佇列1不阻塞。這樣就實現了你一下我一下交替執行程式碼
static class Business {
BlockingQueue<Integer> queue1 = new ArrayBlockingQueue<Integer>(1);
BlockingQueue<Integer> queue2 = new ArrayBlockingQueue<Integer>(1);
// 構造塊,
{
try {
System.out.println("例項初始化時往佇列2種put一下");
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 <= 2; 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 <= 3; j++) {
System.out.println("main thread sequece of " + j + ",loop of "
+ i);
}
System.out.println();
try {
queue1.take();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
執行結果:
相關文章
- Java多執行緒之執行緒中止Java執行緒
- 多執行緒應用執行緒
- java多執行緒系列之執行緒池Java執行緒
- iOS中多執行緒之GCD應用iOS執行緒GC
- java多執行緒之(synchronized)Java執行緒synchronized
- Java多執行緒之FutureTaskJava執行緒
- Java多執行緒之CASJava執行緒
- java多執行緒之執行緒的基本使用Java執行緒
- java--多執行緒之後臺執行緒Java執行緒
- Java多執行緒——執行緒Java執行緒
- Java多執行緒之守護執行緒實戰Java執行緒
- 多執行緒之應知應會執行緒
- java多執行緒系列之synchronousQueueJava執行緒
- Java多執行緒之執行緒同步【synchronized、Lock、volatitle】Java執行緒synchronized
- Java多執行緒-執行緒中止Java執行緒
- Java多執行緒——執行緒池Java執行緒
- 【Java多執行緒】輕鬆搞定Java多執行緒(二)Java執行緒
- 多執行緒-執行緒控制之休眠執行緒執行緒
- 多執行緒-執行緒控制之加入執行緒執行緒
- 多執行緒-執行緒控制之禮讓執行緒執行緒
- Java多執行緒之synchronized理論Java執行緒synchronized
- java多執行緒之volatile理解Java執行緒
- Java多執行緒之synchronized詳解Java執行緒synchronized
- java多執行緒之Thread類Java執行緒thread
- Java多執行緒之進階篇Java執行緒
- java——多執行緒Java執行緒
- java 多執行緒Java執行緒
- 【Java】多執行緒Java執行緒
- JAVA 多執行緒 ??Java執行緒
- java多執行緒Java執行緒
- Java - 多執行緒Java執行緒
- java 多執行緒守護執行緒Java執行緒
- Java多執行緒-執行緒通訊Java執行緒
- Java多執行緒-執行緒狀態Java執行緒
- Java多執行緒(2)執行緒鎖Java執行緒
- java多執行緒9:執行緒池Java執行緒
- 【java多執行緒】(二)執行緒停止Java執行緒
- Java多執行緒——守護執行緒Java執行緒