我在WAS上部署了一个java应用程序。它接收来自WPS(Websphere Process Server)的请求并将数据插入Oracle DB。 为了避免多线程问题,我在同步块中编写了代码。现在应用程序在Dev env(单个JVM)上正常工作。 我开始知道QA有多个JVM。我听说同步块在多个JVM上不起作用,所以我担心我的应用程序是否在QA环境中工作?
答案 0 :(得分:0)
同步块不适用于JVM,因此如果你非常依赖它,你可能会遇到奇怪的行为。您应该使用数据库事务和锁定来避免从多个JVM并发访问数据库。
不幸的是,如果您的应用程序在集群环境中正常运行,那么问题描述就是模糊不清。
答案 1 :(得分:0)
synchronized关键字使用锁定来调用JVM中调用方法的实例,因此如果应用程序在多个JVM上运行,则无法保证线程安全。 (事实上,如果您在上同步,那么您只能在单个JVM中获得保证。)
此机制已有详细记录,包括Oracle JavaDocs,但有关该主题的博文可能更容易理解。
我认为我们无法告诉您,您的应用程序是否适用于QA"根据您提供的信息。这取决于所做的事情的细节。例如,假设WPS正在向JVM发送请求,您只需将它们全部插入到数据库中即可。如果使用主键(即JVM中递增的数字键)插入数据库,则会出现问题,因此可能不会出现同步代码。另一方面,如果您正在生成随机主ID,或者让数据库为您生成ID,那么它就不太可能成为问题。
如果您考虑哪些方案可能导致您的应用程序失败或做错事,这可能会有所帮助。然后,如果您不确定如何处理,至少可以提出更具体的问题。