import java.util.ArrayList;
import java.util.List;
/**
* 模拟队列
* @date 2017年8月22日
* @version 2.0.1
*/
public class Test {
static List<Integer> aa = new ArrayList<Integer>();
static int fullSize = 20;//最多放20个值
static boolean isNotFullAA = true;
/**模拟队列的进出,先进先出*/
private static void moniduilie() throws Exception {
//存入
Thread t1 = createThreadForIn(1);
Thread t2 = createThreadForIn(2);
Thread t3 = createThreadForIn(3);
//取出
Thread tn = createThreadForOut();
t1.start();
t2.start();
t3.start();
tn.start();
}
/**创建存入的线程*/
static Thread createThreadForIn(final int k) {
Thread t = new Thread(k+"线程---") {
@Override
public void run() {
int t = 10*(k-1)+1;
while(t<=10*k) {//[(012)1~(123)0]
synchronized(aa) {
if(isNotFullAA) {
aa.add(t);
System.out.println(this.getName()+"第"+aa.size()+"位入>>>>>"+t++);
if(aa.size()==fullSize) isNotFullAA = false;//放满则不再放入aa,暂停存入
} else {
// TODO 执行不可存入提示
// System.out.println("------------------------------------已满,待清除部分后再存入");
}
}
try {
if(t==10*k) {//每休眠10秒再次存入数据
Thread.sleep(10000);
t = 10*(k-1)+1;
}
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
return t;
}
/**创建取出的线程*/
private static Thread createThreadForOut() {
Thread tn = new Thread("tn---") {
@Override
public void run() {
while(true) {
synchronized(aa) {
//1.取数据
if(aa.size()>0) {
System.out.println(" ---------------------->"+aa.get(0));
aa.remove(0);
}
//2.判断是否可以存入数据,可以则修改为true
if(aa.size() < fullSize) {
isNotFullAA = true;
}
}
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
return tn;
}
///
public static void main(String[] args) throws Exception {
moniduilie();
}
}