在工作中遇到一个头痛问题,在无事务的高并发的情况下PKG的全局变量会被互相修改,而加上事务后就没问题。
环境配置:WEBLOGIC8.1,ORACLE10G
拿如下这个PKG为例,JAVA的业务逻辑是这样的:
1.先调用pkg_test.set_use_name
2.执行一些其它代码
3.再调用pkg_test.get_use_name
执行的情况大概如下,也就是说,有的线程得到的NAME并不是自己设置的那个NAM。
一旦为此业务逻辑加上事务后,就没有这个现象了。
想请教各位大侠,问题的原因是什么啊?
线程名称 设置的NAME 得到的NAME
线程1 A B
线程2 B B
线程3 C D
线程4 D D
[color=#FF0000]create or replace package body pkg_test is
v_use_name varchar2(6);
procedure set_use_name(p_use_name in varchar2) is
begin
v_use_name := p_use_name;
end set_use_name;
function get_use_name return varchar2 is
begin
return v_use_name;
end get_use_name;
end pkg_test;[/color]
在WEBLOGIC8.1和ORACLE10G环境下,JAVA业务逻辑中PKG的全局变量在无事务高并发场景下被多线程互相修改,导致获取到的变量值不一致。加入事务后问题解决。
58

被折叠的 条评论
为什么被折叠?



