OLTP 并发环境下使用 SPL 的疑问
在 Web 多线程环境中,业务代码 调用继承了 jdbc 接口的 SPL 的执行代码。
从源码来看,SPL 是单例的实现方式。并且有成员变量。
那么在多线程访问的情况下,类似 Servlet 的中成员变量,一般采用
代码同步的 synchronized 方式。或者是将 变量定义为 ThreadLocal 的方式
问题
1、在多线程环境下,SPL 的执行逻辑是否 类似工具类一样,不存在多线程的并发性问题?
2、如果在多线程环境中有并发性额外难题,需要业务程序考虑多线程的问题,那么在调用 SPL 是否需要在业务代码中采用 synchronized 方式来调用 SPL 来解决并发性问题 或者有其他方式?
spl 网格中定义的变量都是局部变量,用 env@j 定义的变量则是任务变量,在任务空间中可能被多线程共享,用 env 无选项定义的变量则全局变量。
需要同步时可以使用 lock 函数加锁。
SPL 在执行中,可能有几种变量形式。
那么
多线程 java 代码 调用 SPL 的时候,是否要在 java 调用的时候 加锁?
有多线程读写同一个全程变量时就要加锁,只读或者没全程变量时不需要。这里所谓的加锁都是 SPL 内部的事,和 Java 无关。
调用 SPL 代码和调用 Java 代码是同样的规则,你觉得调用一段 Java 代码时要加锁,那就加。不需要加就不加。