package zhu.suo;
import java.util.concurrent.ArrayBlockingQueue;
/**
* 子线程循环10次,接着主线程循环20次,接着又回到子线程循环10次,主线程循环20次,依次交替循环5次
* 使用阻塞队列:ArrayBlockingQueue类 方法 put(e) take() 若不满足条件则线程阻塞
*
* @author nn
*思想:
* 把互斥资源封装到一个类中
*/
public class BlockingQueueCommunication {
static DataDemo getDemo(){
BlockingQueueCommunication M= new BlockingQueueCommunication();
DataDemo instance= M.new DataDemo();//=左边 对象.new 内部类名称()---获取内部类对象
return instance;
}
public static void main(String [] agrs){
final DataDemo demo =getDemo();
new Thread(
new Runnable() {
@Override
public void run() {
for(int i=1;i<5;i++)
{demo.sub(i);}
}
}
).start();
for(int i=1;i<5;i++)
{demo.main(i);}
}
class DataDemo{
private ArrayBlockingQueue<Integer> que1 = new ArrayBlockingQueue(1);
private ArrayBlockingQueue<Integer> que2 = new ArrayBlockingQueue(1);
//构造代码快
{
try {
que2.put(1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
void sub(int i)
{
try {
que1.put(1);//若有一个则阻塞
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for(int j=1;j<11;j++)
{
System.out.println("子线程:"+Thread.currentThread().getName()+"循环"+j+",外循环"+i);
}
try {
que2.take();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}//
}
void main(int i)
{
try {
que2.put(1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for(int j=1;j<21;j++)
{
System.out.println("主线程:"+Thread.currentThread().getName()+"循环"+j+",外循环"+i);
}
try {
que1.take();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}//
}
}
}
import java.util.concurrent.ArrayBlockingQueue;
/**
* 子线程循环10次,接着主线程循环20次,接着又回到子线程循环10次,主线程循环20次,依次交替循环5次
* 使用阻塞队列:ArrayBlockingQueue类 方法 put(e) take() 若不满足条件则线程阻塞
*
* @author nn
*思想:
* 把互斥资源封装到一个类中
*/
public class BlockingQueueCommunication {
static DataDemo getDemo(){
BlockingQueueCommunication M= new BlockingQueueCommunication();
DataDemo instance= M.new DataDemo();//=左边 对象.new 内部类名称()---获取内部类对象
return instance;
}
public static void main(String [] agrs){
final DataDemo demo =getDemo();
new Thread(
new Runnable() {
@Override
public void run() {
for(int i=1;i<5;i++)
{demo.sub(i);}
}
}
).start();
for(int i=1;i<5;i++)
{demo.main(i);}
}
class DataDemo{
private ArrayBlockingQueue<Integer> que1 = new ArrayBlockingQueue(1);
private ArrayBlockingQueue<Integer> que2 = new ArrayBlockingQueue(1);
//构造代码快
{
try {
que2.put(1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
void sub(int i)
{
try {
que1.put(1);//若有一个则阻塞
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for(int j=1;j<11;j++)
{
System.out.println("子线程:"+Thread.currentThread().getName()+"循环"+j+",外循环"+i);
}
try {
que2.take();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}//
}
void main(int i)
{
try {
que2.put(1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for(int j=1;j<21;j++)
{
System.out.println("主线程:"+Thread.currentThread().getName()+"循环"+j+",外循环"+i);
}
try {
que1.take();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}//
}
}
}