线程没有进入等待状态,而是跳过剩余的代码并出来

我有一段代码在特定条件下等待Class锁,在执行了一些操作之后,我对该Class锁执行了通知。

但是,只要有一个线程等待它跳过以下代码并退出执行,我都会记录我的代码的详细信息。

我想了解这里出了什么问题:(

如果您能在下面的代码中提出一些可以解决的建议,那也很好

下面是我的代码供参考

TroubleTicketRequestManagement:

public class TroubleTicketRequestManagement {

private static Logger logger = Logger.getLogger(TroubleTicketRequestManagement.class);

public SimpleactionResponse addRequestToPool(int docketNo) throws InterruptedException {
    logger.info("addRequestToPool started with Docket No : " + docketNo);

    SimpleactionResponse response = new SimpleactionResponse();

    RequestSynchronization requestSynchronization = new RequestSynchronization(docketNo);

    Thread threadOne = new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                RequestSynchronization.synchronizeRequests(requestSynchronization);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    });

    threadOne.start();

    return response;
}

public SimpleactionResponse removeRequestFromPool(int docketNo) throws InterruptedException {
    logger.info("removeRequestFromPool started with Docket No : " + docketNo);

    SimpleactionResponse response = new SimpleactionResponse();

    RequestSynchronization requestSynchronization = new RequestSynchronization(docketNo);

    Thread threadTwo = new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                RequestSynchronization.removeRequests(requestSynchronization);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    });

    threadTwo.start();

    return response;
}

 }

RequestSynchronization:

public class RequestSynchronization {

    private static Logger logger = Logger.getLogger(RequestSynchronization.class);
    private static Set<Integer> set = new HashSet<Integer>();
    private final static Object lock = new Object();
    private static volatile int currentDocketId = -1;

    private int docketNo;

    public int getDocketNo() {
        return docketNo;
    }

    public RequestSynchronization(int docketNo) {
        super();
        this.docketNo = docketNo;
    }

    public synchronized static void synchronizeRequests(RequestSynchronization requestSynchronization)
            throws InterruptedException {

        currentDocketId = requestSynchronization.getDocketNo();

        while (set.contains(currentDocketId)) {
            logger.info("Before Notify");
            RequestSynchronization.class.wait();
            logger.info("After Notify");
        }

        set.add(currentDocketId);

    }

    public synchronized static void removeRequests(RequestSynchronization requestSynchronization)
            throws InterruptedException {

        currentDocketId = requestSynchronization.getDocketNo();
        set.remove(requestSynchronization.getDocketNo());
        RequestSynchronization.class.notifyAll();

    }

}

摘要:我要执行的操作是,如果请求的ID与先前的处理请求的ID相同,则使请求等待。一旦先前的请求完成执行,它将调用Notify。

PS:可以同时创建多个线程

提前谢谢

xunying_1 回答:线程没有进入等待状态,而是跳过剩余的代码并出来

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3137430.html

大家都在问