在Java并发编程中,确保数据在多线程环境下的安全性是至关重要的。栈(Stack)作为一种后进先出(LIFO)的数据结构,在并发环境下其操作(如push、pop)如果不加以适当的同步控制,很容易引起数据不一致的问题。
设计一个线程安全的栈(Thread-Safe Stack),要求支持以下操作:
- push(E item): 将元素压入栈顶。
- pop(): 移除并返回栈顶元素;如果栈为空,则返回null或抛出异常(视设计而定)。
- peek(): 返回栈顶元素但不移除它;如果栈为空,则返回null或抛出异常(视设计而定)。