小编Jef*_*ler的帖子

基于id的线程同步

我需要一种方法来只允许一个线程修改与服务票证相关的数据。可能有多个线程同时尝试修改票证数据。

下面是我的方法的简化版本。有一个更好的方法吗?也许使用 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)

java thread-safety

5
推荐指数
1
解决办法
4592
查看次数

标签 统计

java ×1

thread-safety ×1