我需要一种方法来只允许一个线程修改与服务票证相关的数据。可能有多个线程同时尝试修改票证数据。
下面是我的方法的简化版本。有一个更好的方法吗?也许使用 java.util.concurrent 包?
public class SomeClass1
{
static final HashMap<Integer, Object> ticketLockMap = new HashMap<Integer, Object>();
public void process(int ticketNumber)
{
synchronized (getTicketLock(ticketNumber))
{
// only one thread may modify ticket data here
// ... ticket modifications here...
}
}
protected static Object getTicketLock(int ticketNumber)
{
Object ticketLock;
// allow only one thread to use map
synchronized (ticketLockMap)
{
ticketLock = ticketLockMap.get(ticketNumber);
if (ticketLock == null)
{
// first time ticket is locked
ticketLock = new Object();
ticketLockMap.put(ticketNumber, ticketLock); …Run Code Online (Sandbox Code Playgroud)