新大陆。Stack竟然是synchronized的。
package java.util;
public class Stack<E> extends Vector<E>
{
private static final long serialVersionUID = 1224463164541339165L;
public E push(E paramE)
{
addElement(paramE);
return paramE;
}
public synchronized E pop()
{
int i = size();
Object localObject = peek();
removeElementAt(i - 1);
return localObject;
}
public synchronized E peek()
{
int i = size();
if (i == 0)
throw new EmptyStackException();
return elementAt(i - 1);
}
public boolean empty()
{
return (size() == 0);
}
public synchronized int search(Object paramObject)
{
int i = lastIndexOf(paramObject);
if (i >= 0)
return (size() - i);
return -1;
}
}
这是源码。Stack是继承自Vector的。而Vector本身就是同步的。然后Stack在其上针对peek、pop等函数又做了同步。这样实现对开发者来说,使用起来是比较简便的。
---------------------------
这让我想起来了python中的Queue,也是经过了同步的。多个线程访问的时候能够保证正确同步。