import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
/**
*阻塞队列BlockingQueue 实现线程通信的效果
*A、B连个线程交替执行任务
*/
public class ThreadTest2 {
public static void main(String[] args) {
final OutputUtil output=new OutputUtil();
new Thread(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
while(true){
output.main();
}
}
}).start();
new Thread(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
while(true){
output.child();
}
}
}).start();
}
static class OutputUtil{
private BlockingQueue<Integer> bq1=new ArrayBlockingQueue<>(1),
bq2=new ArrayBlockingQueue<>(1);
/**
* 匿名构造方法:执行构造方式前先执行匿名构造方法
*/
{
try {
bq2.put(1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void main(){
try {
bq1.put(1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for(int i=1;i<=10;i++){
System.out.println(Thread.currentThread().getName()+":"+i);
}
try {
bq2.take();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void child(){
try {
bq2.put(1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for(int i=1;i<=10;i++){
System.out.println(Thread.currentThread().getName()+":"+i);
}
try {
bq1.take();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
java多线程:16、阻塞队列【BlockingQueue】实现线程数据共享的效果
最新推荐文章于 2022-08-05 17:49:14 发布