用java语言设计一个先进先先出的队列类
展开全部
代码仅供参考,如有问题,欢迎追问!
Basket:
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
/**
* 定义装苹果的篮子
*
* @author stone
* @version 2013-05-21
*/
public class Basket {
// 篮子,能够容纳Integer.MAX_VALUE个苹果
BlockingQueue<Object> basket = new LinkedBlockingQueue<Object>(Integer.MAX_VALUE);
// 生产苹果,放入篮子
public void produce(Object obj) throws InterruptedException {
// put方法放入一个苹果,若basket满了,等到basket有位置
basket.put(obj);
}
// 消费苹果,从篮子中取走
public Object consume() throws InterruptedException {
// take方法取出一个苹果,若basket为空,等到basket有苹果为止(获取并移除此队列的头部)
return basket.take();
}
}
BaksetTest:
import org.apache.log4j.Logger;
public class BaksetTest {
static Logger logger = Logger.getLogger(BaksetTest.class);
static Basket basket = new Basket();
public static void main(String[] args) throws Exception {
try{
Consume con = new Consume(basket);
Thread thread = new Thread(con);
thread.start();
Integer num = 0;
while(true){//循环放入数据到队列
num++;
basket.produce(num);
Thread.sleep(1*1000);
if(num>1000000) num =0;
}
} catch( Exception e ){
logger.error("error : ", e);
}
}
}
//消费线程,用来消费队列里堆积数据,此线程为阻塞状态
class Consume implements Runnable {
Logger logger = Logger.getLogger(BaksetTest.class);
Basket basket;
public Consume (Basket basket){
this.basket = basket;
}
@Override
public void run() {
try{
while(true){//等待从队列取出数据
System.out.println("取出:" + basket.consume());
}
} catch ( Exception e ){
logger.error("error : ", e);
}
}
}
展开全部
package zhidao;
import java.util.ArrayList;
import org.junit.Test;
import com.sun.corba.se.impl.orb.ParserTable.TestAcceptor1;
import com.sun.xml.internal.bind.v2.schemagen.xmlschema.List;
public class Queue {
ArrayList<Object> list;
public Queue(){
//定义一个list,用来存放数据
list = new ArrayList<>();
}
//进
public void in(Object obj){
list.add(obj);
}
//出
public Object out(){
//获取最先进入的元素
Object obj = list.get(0);
//删除最先进入的元素
list.remove(obj);
return obj;
}
//获取队列长度
public int length(){
return list.size();
}
@Test
public void test(){
Queue queue = new Queue();
queue.in(1);
queue.in(2);
queue.in(3);
queue.in(100);
int length = queue.length();
for(int i = 0;i<length;i++){
//预测输出1 2 3 100
System.out.println(queue.out());
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用java语言设计一个先进先先出的队列类这里资料挺全的~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询