我的程序涉及许多JAVA线程调用具有不同参数的KornShell(ksh)脚本文件。该脚本文件又调用一些SQL命令 返回一些状态。我将此状态存储在变量中作为脚本的一部分,并检查从SQL返回的值并采取适当的操作。 问题是所有脚本都在同一个会话中执行,因此变量名称在所有线程中共享。由于这些线程异步工作,我希望此链接被破坏。我能想到的最简单的解决方案是为每个线程设置一个不同的变量(使用脚本的一些输入参数作为标识符),但这意味着该变量的名称必须是动态的。也就是说,我应该能够在另一个变量的名称中使用变量的值。 这甚至可能吗?如果是的话我该怎么办?
Java线程 - |同一会话|
| |
Java线程 - - |相同的脚本|
| |
Java线程 - - - |相同的var名称|
| |
Java线程 - - | (同样的var |
|名称可能导致|
Java线程 - |不一致)|
如果没有,那么有人可以提出另一种方法吗?这方面的一个重要方面是JAVA部分是一个服务器程序,并且将运行更长的持续时间,因此我需要手动“取消设置”这些变量。 (如果我使用数组存储所有这些,我不能做的事情)
答案 0 :(得分:1)
...我将此状态存储在变量中作为(ksh)脚本的一部分,并检查从SQL返回的值并采取适当的操作。问题是所有脚本都在同一个会话中执行,因此变量名称在所有线程中共享。
总结一下:
每个帖子使用System.exec(...)
或等效文件来运行ksh
脚本
ksh
脚本使用变量来存储运行SQL查询的状态。
在这种情况下,不会在正在运行的脚本的不同实例之间共享ksh变量。每个ksh
实例都有自己的变量集。
对于这里发生的事情,必须有另一种解释。
你说if [ $var_$val -eq 0 ]; then ...
给出了错误的答案。我不惊讶。 $var_$val
不可能扩展为数字,因此查看它是否为零的测试将始终失败。