【发布时间】:2015-08-11 04:34:45
【问题描述】:
我有以下 JAVA 代码,它根据从数据库收到的最大请求数生成请求号。
synchronized (this) {
System.out.println("stsrt");
certRequest.setRequestNbr(generateRequestNumber(certInsuranceRequestAddRq
.getAccountInfo().getAccountNumberId()));
System.out.println("outside funcvtion"+certRequest.getRequestNbr());
ItemIdInfo itemIdInfo = new ItemIdInfo();
dao.insert(certRequest);
System.out.println("end");
}
为了理解流程,我在代码中放入了System.out.println() 语句,其结果如下:
stsrt
stsrt
inside function request number37
outside funcvtion37
inside function request number37
outside funcvtion37
end
end
“内部函数请求”描述了我的函数调用generateRequestNumber(),它根据数据库生成请求编号。
如果您注意到System.out.println() 语句,当两个线程同时运行时,两个线程一起进入同步代码,(因为我在开始时一起获得“stsrt”语句),两个线程也一起退出代码(如我把“结束”语句放在最后)。
问题:如何同步我的代码,以便第一个线程完成执行,然后另一个线程完成?
【问题讨论】:
-
你在使用任何框架吗?您可以将此类设为单例。
-
并展示你是如何多次调用这段代码的(显示在你的输出中)?
-
Naman,我无法做到单身
-
将您的第一个输出更改为:
System.out.println("start " + System.identityHashCode(this));并发布结果。 -
好的。因此,您有多个 ABC.java 类实例,因此
synchronized (this)无法按预期工作。您可以检查您的前端代码,因为您可能正在执行new (ABC),这会导致 ABC 类的独立对象。
标签: java multithreading hibernate