模拟队列-先进先出

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();
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值