具体代码如下:
以下是两个线程:
import java.util.*
public class Thread_List_Operation {
//假设有这么一个队列
static List list = new LinkedList()
public static void main(String[] args) {
Thread t
t = new Thread(new T1())
t.start()
t = new Thread(new T2())
t.start()
}
}
//线程T1,用来给list添加新元素
class T1 implements Runnable{
void getElemt(Object o){
Thread_List_Operation.list.add(o)
System.out.println(Thread.currentThread().getName() + "为队列添加了一个元素")
}
@Override
public void run() {
for (int i = 0i <10i++) {
getElemt(new Integer(1))
}
}
}
//线程T2,用来给list添加新元素
class T2 implements Runnable{
void getElemt(Object o){
Thread_List_Operation.list.add(o)
System.out.println(Thread.currentThread().getName() + "为队列添加了一个元素")
}
@Override
public void run() {
for (int i = 0i <10i++) {
getElemt(new Integer(1))
}
}
}
//结果(乱序)
Thread-0为队列添加了一个元素
Thread-1为队列添加了一个元素
Thread-0为队列添加了一个元素
Thread-1为队列添加了一个元素
Thread-1为队列添加了一个元素
Thread-1为队列添加了一个元素
Thread-1为队列添加了一个元素
Thread-1为队列添加了一个元素
Thread-1为队列添加了一个元素
Thread-1为队列添加了一个元素
Thread-1为队列添加了一个元素
Thread-1为队列添加了一个元素
Thread-0为队列添加了一个元素
Thread-0为队列添加了一个元素
Thread-0为队列添加了一个元素
Thread-0为队列添加了一个元素
Thread-0为队列添加了一个元素
Thread-0为队列添加了一个元素
Thread-0为队列添加了一个元素
Thread-0为队列添加了一个元素
java使用数据结构来实现FIFO先进先出的队列,实例如下:
/** To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package linkedlisttest
import java.util.ArrayList
import java.util.Deque
import java.util.LinkedList
import java.util.List
/**
*
* @author Vicky.H
* @email [email protected]
*/
public class FIFOTest {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
FIFO<A> fifo = new FIFOImpl<A>(5)
for (int i = 0 i < 20 i++) {
A a = new A("A:" + i)
A head = fifo.addLastSafe(a)
System.out.println(i + "\thead:" + head + "\tsize:" + fifo.size())
}
System.out.println("---------------")
System.out.println("弹出数据")
List<A> polls = fifo.setMaxSize(3)
for (A a : polls) {
System.out.println("\thead:" + a)
}
System.out.println("剩余数据")
for (A a : fifo) {
System.out.println("\thead:" + a)
}
System.out.println(fifo.size())
}
}
interface FIFO<T> extends List<T>, Deque<T>, Cloneable, java.io.Serializable {
/**
* 向最后添加一个新的,如果长度超过允许的最大值,则弹出一个 *
*/
T addLastSafe(T addLast)
/**
* 弹出head,如果Size = 0返回null。而不同于pop抛出异常
* @return
*/
T pollSafe()
/**
* 获得最大保存
*
* @return
*/
int getMaxSize()
/**
* 设置最大存储范围
*
* @return 返回的是,因为改变了队列大小,导致弹出的head
*/
List<T> setMaxSize(int maxSize)
}
class FIFOImpl<T> extends LinkedList<T> implements FIFO<T> {
private int maxSize = Integer.MAX_VALUE
private final Object synObj = new Object()
public FIFOImpl() {
super()
}
public FIFOImpl(int maxSize) {
super()
this.maxSize = maxSize
}
@Override
public T addLastSafe(T addLast) {
synchronized (synObj) {
T head = null
while (size() >= maxSize) {
head = poll()
}
addLast(addLast)
return head
}
}
@Override
public T pollSafe() {
synchronized (synObj) {
return poll()
}
}
@Override
public List<T> setMaxSize(int maxSize) {
List<T> list = null
if (maxSize < this.maxSize) {
list = new ArrayList<T>()
synchronized (synObj) {
while (size() > maxSize) {
list.add(poll())
}
}
}
this.maxSize = maxSize
return list
}
@Override
public int getMaxSize() {
return this.maxSize
}
}
class A {
private String name
public A() {
}
public A(String name) {
this.name = name
}
public String getName() {
return name
}
public void setName(String name) {
this.name = name
}
@Override
public String toString() {
return "A{" + "name=" + name + '}'
}
}