ArrayDeque是Java中的一个双端队列(deque),它可以用作堆栈(stack)数据结构。堆栈是一种后进先出(LIFO)的数据结构,只允许在顶部进行插入和删除操作。
同步装饰器(synchronized decorator)是一种在多线程环境下保证线程安全的方法。它可以用来包装其他非线程安全的数据结构,使其线程安全。
下面是ArrayDeque作为堆栈和使用同步装饰器的示例代码:
import java.util.ArrayDeque;
public class StackExample {
public static void main(String[] args) {
ArrayDeque stack = new ArrayDeque<>();
// 压栈
stack.push(1);
stack.push(2);
stack.push(3);
// 出栈
while (!stack.isEmpty()) {
System.out.println(stack.pop());
}
}
}
输出结果:
3
2
1
import java.util.ArrayDeque;
import java.util.Collections;
import java.util.Deque;
public class SynchronizedDequeExample {
public static void main(String[] args) {
Deque deque = new ArrayDeque<>();
Deque synchronizedDeque = Collections.synchronizedDeque(deque);
// 多线程环境下操作synchronizedDeque
Runnable pushTask = () -> {
for (int i = 0; i < 10; i++) {
synchronizedDeque.push(i);
System.out.println("Pushed: " + i);
}
};
Runnable popTask = () -> {
for (int i = 0; i < 10; i++) {
int element = synchronizedDeque.pop();
System.out.println("Popped: " + element);
}
};
Thread pushThread1 = new Thread(pushTask);
Thread pushThread2 = new Thread(pushTask);
Thread popThread1 = new Thread(popTask);
Thread popThread2 = new Thread(popTask);
pushThread1.start();
pushThread2.start();
popThread1.start();
popThread2.start();
}
}
输出结果类似于:
Pushed: 0
Pushed: 1
Popped: 1
Pushed: 2
Popped: 2
Pushed: 3
Popped: 3
...
以上代码示例展示了ArrayDeque作为堆栈和使用同步装饰器的两种用法。