如何使用java在数据库中保存线程示例

k3bvogb1  于 2023-06-20  发布在  Java
关注(0)|答案(1)|浏览(108)

这是SAP PI要求,

  • 源系统:XY_客户端
  • 中间件:PI系统
  • 目标系统:SAP

XML文件被接收到PI系统,对于每个XML文件生成内部文件以跟踪store_number和xml文件的计数。
它是如何工作的:假设如果XML_FILE_1达到PI,则创建名为sequence_gen内部文件。该文件包含XML文件中存在的存储编号,计数将初始化为1。

  • 所以第一次,
  • sequence_gen file contains Store: 1001 Count:1
  • (经过一段时间的间隔)
  • 如果XML_FILE_2第二次到达P1,
  • sequence_gen file contains Store: 1001 Count:2
  • 等等。

我的问题是:如果有“n”个文件同时进入PI系统,则第一个文件将锁定sequence_gen文件。那么第二个文件将如何更新sequence_gen文件的值?那么如何解决这个问题呢?
我想为每个调用创建一个线程示例,并将其存储在数据库中。以及检索每个示例、执行函数、将结果返回到XML调用并删除该示例。这可能吗?如何推进这一工作?

vohkndzv

vohkndzv1#

与其跟踪锁定和解锁文件的所有线程,不如让一个线程负责更改文件。让每个线程将一个请求放入一个Concurrent Queue中,然后Concurrent Queue通知Sequence_Gen线程写入自己的文件。实质上:
Sequence_Gen线程:

@Override
public synchronized void Run(){
    while(true){ //Some condition
        while(queue.isEmpty()) { 
            this.wait();

        }
        Object obj = queue.pop();
        //Open file
        file.write(obj);
        //Close file
    }
}

然后,在任何其他线程中,只需排队并通知有东西要写。

public synchronized void AddItem(Object item) {
    queue.put(item);
    this.notifyAll();
}

相关问题