请用Java语言实现一个队列,该队列可在多线程环境下使用,多个线程可并发向队列插入数据或读取数据。
另外再给出访问这个队列的多线程实现类。
另外再给出访问这个队列的多线程实现类。
解决方案 »
- IOException cannot be resolved to a type
- java应用程序的问题
- 一道考试题目.请高手指教
- 怎样固定控件的大小和位置
- JTable如何使用
- 初学JAVA,总觉得界面很难定位,有什么技巧?
- eclips弱弱问题
- jbuilder的一个工程中,在同一个package下的两个类,一个类a要用到另一个类b的成员函数,要在原来的基础上,而不是重新new一个类b的实例,应该
- 哪位有java通信方面的经验,谈谈如何利用java编写服务器程序来接受unix主机发送的数据信息?
- 轻轻的,问个小问题,小问题...
- jdbc执行带参数的SQL语句
- JButton改变Icon的问题
java仍未成功,吾要更加努力!
import java.util.ArrayList;
import java.util.List;
import java.util.Random;public class Queue {
List<Integer> Integers = new ArrayList<Integer>();
int maxSize = 4;
int count = 0; public Queue() {
} public synchronized void add(Integer e) {
if (Integers.size() == maxSize) {
try {
this.wait();
} catch (InterruptedException e1) {
e1.printStackTrace();
}
}
this.notifyAll();
if (Integers.size() < maxSize) {
System.out.println(Thread.currentThread().getName() + " " + e);
Integers.add(e);
count++;
}
} public synchronized void remove() {
if (Integers.size() == 0) {
try {
this.wait();
} catch (InterruptedException e1) {
e1.printStackTrace();
}
}
this.notifyAll();
if (Integers.size() > 0) {
System.out.println(Thread.currentThread().getName() + " "
+ this.Integers.get(0));
Integers.remove(0);
}
} public static void main(String args[]) {
Queue q = new Queue();
Create c = new Create(q);
PullOut po = new PullOut(q);
new Thread(c).start();
new Thread(po).start();
}
}class Create implements Runnable {
String name = "生产者";
private Queue q; public Create(Queue q) {
this.q = q;
} @Override
public void run() {
int count = 0;
Random r = new Random();
while (count < 10) {
int number = r.nextInt() % 20;
q.add(number);
try {
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
count++;
}
}
}class PullOut implements Runnable {
String name = "消费者";
private Queue q; public PullOut(Queue q) {
this.q = q;
} @Override
public void run() {
int count = 0;
while (count < 10) {
q.remove();
try {
Thread.sleep(800);
} catch (InterruptedException e) {
e.printStackTrace();
}
count++;
}
}
}