Skip to content

Commit c41dde8

Browse files
committed
添加生产者消费者-阻塞队列实现
1 parent d200fb2 commit c41dde8

4 files changed

Lines changed: 20 additions & 8 deletions

File tree

src/main/java/cn/byhieg/threadtutorial/concurrent/blocking/ArrayBlock.java

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
package cn.byhieg.threadtutorial.concurrent.blocking;
22

3-
import java.util.concurrent.ArrayBlockingQueue;
4-
import java.util.concurrent.BlockingQueue;
3+
import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;
4+
5+
import javax.sound.midi.SoundbankResource;
6+
import java.lang.management.LockInfo;
7+
import java.util.concurrent.*;
58

69
/**
710
* Created by byhieg on 17/5/3.
@@ -11,8 +14,18 @@ public class ArrayBlock {
1114

1215
private BlockingQueue<String> blockingQueue;
1316

14-
public ArrayBlock(){
15-
blockingQueue = new ArrayBlockingQueue<String>(1024);
17+
public ArrayBlock(int index) {
18+
switch (index) {
19+
case 0:
20+
blockingQueue = new ArrayBlockingQueue<String>(3);
21+
break;
22+
case 1:
23+
blockingQueue = new LinkedBlockingQueue<>();
24+
break;
25+
case 2:
26+
blockingQueue = new SynchronousQueue<>();
27+
break;
28+
}
1629
}
1730

1831
public BlockingQueue<String> getBlockingQueue() {

src/main/java/cn/byhieg/threadtutorial/concurrent/blocking/Costumer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public void run() {
2020
super.run();
2121
while (true) {
2222
try {
23-
Thread.sleep(2000);
23+
Thread.sleep(5000);
2424
String str = blockingQueue.take();
2525
System.out.println(getName() + " 取出数据 " + str);
2626
} catch (InterruptedException e) {

src/main/java/cn/byhieg/threadtutorial/concurrent/blocking/Producer.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,8 @@ public void run() {
1414
super.run();
1515
for (int i = 0 ; i < 5;i++) {
1616
try {
17-
System.out.println(getName() + " 生产数据");
1817
blockingQueue.put(i + "");
19-
Thread.sleep(1000);
18+
System.out.println(getName() + " 生产数据");
2019
} catch (InterruptedException e) {
2120
e.printStackTrace();
2221
}

src/test/java/cn/byhieg/threadtutorialtest/concurrenttest/blockingtest/ArrayBlockTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public class ArrayBlockTest extends TestCase {
1515
ArrayBlock block;
1616
public void setUp() throws Exception {
1717
super.setUp();
18-
block = new ArrayBlock();
18+
block = new ArrayBlock(2);
1919
}
2020

2121
public void tearDown() throws Exception {

0 commit comments

Comments
 (0)