Java代码同步问题

Java代码同步问题,java,multithreading,hibernate,Java,Multithreading,Hibernate,我有以下JAVA代码,它根据从数据库接收到的最大请求数生成请求号 synchronized (this) { System.out.println("stsrt"); certRequest.setRequestNbr(generateRequestNumber(certInsuranceRequestAddRq .getAccountInfo().getAccountNumberId())); System.out.pri

我有以下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”语句放在一起),并且两个线程一起退出代码(因为我在结束时将“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