如何使用Java在数据库中保存线程实例

问题描述 投票:0回答:1

这是SAP PI的要求,

  • 源系统:XY_Client
  • 中间件:PI System
  • 目标系统: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第二次到达PI,

sequence_gen file contains Store: 1001 Count:2等等..

我的问题是:如果同时向PI System发送n个文件,则第一个文件将锁定sequence_gen文件。那么第二个文件将如何将值更新为sequence_gen文件?那么如何解决这个问题呢?

我想为每个调用创建一个线程实例,并将其存储在数据库中。并检索每个实例,执行功能,将结果返回给xml调用并删除该实例。如何进行下去?

java multithreading sap sap-xi sap-pi
1个回答
1
投票

您可能只有一个线程负责更改文件,而不是跟踪所有锁定和解锁文件的线程。让每个线程发出一个将文件更改为并发队列的请求,然后该队列通知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();
}
© www.soinside.com 2019 - 2024. All rights reserved.