Java代码同步问题
我有以下JAVA代码,它根据从数据库接收到的最大请求数生成请求号Java代码同步问题,java,multithreading,hibernate,Java,Multithreading,Hibernate,我有以下JAVA代码,它根据从数据库接收到的最大请求数生成请求号 synchronized (this) { System.out.println("stsrt"); certRequest.setRequestNbr(generateRequestNumber(certInsuranceRequestAddRq .getAccountInfo().getAccountNumberId())); System.out.pri
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”语句放在一起),并且两个线程一起退出代码(因为我在结束时将“end”语句放在一起)
问题:我如何同步代码,使第一个线程完成执行,然后另一个线程完成执行?这取决于您同步的对象 执行
synchronized(this){}
时,它会将块与this
对象同步。这意味着2个(或更多)线程不能同时使用同一对象访问块
但在您的示例中,您似乎在使用不同的对象同时访问该方法。因此,它可以并行访问它们
如果要在所有对象之间同步,请在类中使用静态最终对象
,并与该对象同步
像
然后,它将在所有对象之间同步。这取决于同步对象 执行
synchronized(this){}
时,它会将块与this
对象同步。这意味着2个(或更多)线程不能同时使用同一对象访问块
但在您的示例中,您似乎在使用不同的对象同时访问该方法。因此,它可以并行访问它们
如果要在所有对象之间同步,请在类中使用静态最终对象
,并与该对象同步
像
然后,它将在所有对象之间同步。这取决于同步对象 执行
synchronized(this){}
时,它会将块与this
对象同步。这意味着2个(或更多)线程不能同时使用同一对象访问块
但在您的示例中,您似乎在使用不同的对象同时访问该方法。因此,它可以并行访问它们
如果要在所有对象之间同步,请在类中使用静态最终对象
,并与该对象同步
像
然后,它将在所有对象之间同步。这取决于同步对象 执行
synchronized(this){}
时,它会将块与this
对象同步。这意味着2个(或更多)线程不能同时使用同一对象访问块
但在您的示例中,您似乎在使用不同的对象同时访问该方法。因此,它可以并行访问它们
如果要在所有对象之间同步,请在类中使用静态最终对象
,并与该对象同步
像
然后它将在所有对象之间同步。我怀疑,您可能会在每个线程中创建
对象
,该表示不同的对象,因此它可以并行访问它们。您可以执行以下操作
synchronized (this.getClass())
我怀疑,您可能会在每个线程中创建对象
,这个代表不同的对象,因此它可以并行访问它们。您可以执行以下操作
synchronized (this.getClass())
我怀疑,您可能会在每个线程中创建对象
,这个代表不同的对象,因此它可以并行访问它们。您可以执行以下操作
synchronized (this.getClass())
我怀疑,您可能会在每个线程中创建对象
,这个代表不同的对象,因此它可以并行访问它们。您可以执行以下操作
synchronized (this.getClass())
这有助于我进行多线程调用。以下是我的system.out.println()结果。stsrt内部功能请求编号38外部功能38 D98F571C-F92E-4B3D-BB34-9260A5708FE5结束stsrt内部功能请求编号38外部功能38 D1D34D96-1124-4B8E-9A22-A63E1A2B77BC结束。然而,我仍然得到相同的请求编号。问题是因为在数据库中保存细节需要时间。这有助于我进行多线程调用。以下是我的system.out.println()结果。stsrt内部功能请求编号38外部功能38 D98F571C-F92E-4B3D-BB34-9260A5708FE5结束stsrt内部功能请求编号38外部功能38 D1D34D96-1124-4B8E-9A22-A63E1A2B77BC结束。然而,我仍然得到相同的请求编号。问题是因为在数据库中保存细节需要时间。这有助于我进行多线程调用。以下是我的system.out.println()结果。stsrt内部功能请求编号38外部功能38 D98F571C-F92E-4B3D-BB34-9260A5708FE5结束stsrt内部功能请求编号38外部功能38 D1D34D96-1124-4B8E-9A22-A63E1A2B77BC结束。然而,我仍然得到相同的请求编号。问题是因为在数据库中保存细节需要时间。这有助于我进行多线程调用。以下是我的system.out.println()结果。stsrt内部功能请求编号38外部功能38 D98F571C-F92E-4B3D-BB34-9260A5708FE5结束stsrt内部功能请求编号38外部功能38 D1D34D96-1124-4B8E-9A22-A63E1A2B77BC结束。然而,我仍然得到相同的请求编号。问题是因为在数据库中保存细节需要时间吗?您是否使用任何框架?您可以将这个类设置为singleton,还可以演示如何调用这个代码m