Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用变量';价值观';定义变量';名称';在科恩希尔_Java_Multithreading_Shell_Scripting_Ksh - Fatal编程技术网

Java 使用变量';价值观';定义变量';名称';在科恩希尔

Java 使用变量';价值观';定义变量';名称';在科恩希尔,java,multithreading,shell,scripting,ksh,Java,Multithreading,Shell,Scripting,Ksh,我的程序涉及许多JAVA线程,它们使用不同的参数调用KornShell(ksh)脚本文件。此脚本文件依次调用一些SQL命令 返回一些状态。我将此状态作为脚本的一部分存储在变量中,并检查从SQL返回的值并采取适当的操作。 问题是所有脚本都在同一个会话中执行,因此变量名在所有线程中共享。由于这些线程是异步工作的,所以我希望断开此链接。我能想到的最简单的解决方案是为每个线程使用不同的变量(使用脚本的一些输入参数作为标识符),但这意味着该变量的名称需要是动态的。也就是说,我应该能够在另一个变量的名称中使

我的程序涉及许多JAVA线程,它们使用不同的参数调用KornShell(ksh)脚本文件。此脚本文件依次调用一些SQL命令 返回一些状态。我将此状态作为脚本的一部分存储在变量中,并检查从SQL返回的值并采取适当的操作。 问题是所有脚本都在同一个会话中执行,因此变量名在所有线程中共享。由于这些线程是异步工作的,所以我希望断开此链接。我能想到的最简单的解决方案是为每个线程使用不同的变量(使用脚本的一些输入参数作为标识符),但这意味着该变量的名称需要是动态的。也就是说,我应该能够在另一个变量的名称中使用一个变量的值。 这可能吗?如果是,我该怎么做

Java线程-|相同会话| | | Java线程---相同的脚本| | | Java线程----|相同的变量名| ||
Java线程--|(此变量相同)| |名称可能导致| Java线程-|不一致)|

如果没有,那么有人能提出替代方法吗?其中一个重要方面是,JAVA部分是一个服务器程序,将运行更长的时间,因此我需要手动“取消设置”这些变量。(如果我使用数组来存储所有这些内容,则无法执行此操作)

。。。我将此状态作为(ksh)脚本的一部分存储在变量中,并检查从SQL返回的值并采取适当的操作。问题是所有脚本都在同一个会话中执行,因此变量名在所有线程中共享

因此,总结一下:

  • 每个线程使用
    System.exec(…)
    或等效程序运行
    ksh
    脚本

  • ksh
    脚本使用变量存储运行SQL查询的状态

在这种情况下,ksh变量将不会在运行脚本的不同实例之间共享。每个
ksh
实例都有自己的变量集

这里发生的事情肯定有另一种解释



你说
如果[$var_u$val-eq 0];然后…
给出了错误的答案。我并不惊讶<代码>$var_$val不可能扩展到一个数字,因此检查它是否为零的测试将始终失败。

该变量是shell脚本变量,还是数据库中的变量?它是shell脚本变量。自从我发布这篇文章以来,我已经取得了一些进展。现在,脚本的每次调用实际上都声明了自己的变量并设置了自己的值,例如调用1:var_1/调用2:var_2/调用3:var_3,但当我尝试在if命令中使用它时,例如,if[$var_$val-eq 0];然后。。。它无法获取适当的值。您在shell脚本中设置的变量是该shell脚本的专用变量,无法被启动的其他shell脚本读取或使用。这意味着您不应该对shell脚本中的变量名有任何问题。如果您确实需要在每个脚本中使用唯一的值,您可以使用特殊的shell变量
$$
,这是该运行脚本的唯一进程号。感谢您指出该变量不会被共享,错误的假设扰乱了我对该问题的分析,一旦我知道分享不是问题所在,我就去别的地方看看,明白发生了什么。