这是 SAP PI 要求,
- 源系统:XY_Client
- 中间件:PI System
- 目标系统:SAP
XML 文件被接收到 PI 系统,对于每个 XML 文件,都会生成一个内部文件来跟踪 store_number 和 xml 文件的计数。
工作原理:假设如果 XML_FILE_1 到达 PI,则会创建名为equence_gen 的内部文件。该文件包含 XML 文件中存在的商店编号,并且计数将初始化为 1。
- 第一次,
sequence_gen 文件包含 Store: 1001 Count:1
- (一段时间间隔后)
- 如果 XML_FILE_2 第二次达到 PI,
sequence_gen 文件包含 Store: 1001 Count:2
- 等等..
我的问题是:如果“n”个文件同时到达 PI 系统,第一个文件将锁定sequence_gen 文件。那么第二个文件将如何将值更新到sequence_gen文件呢?那么如何解决这个问题呢?
我想为每个调用创建一个线程实例并将其存储在数据库中。并检索每个实例,执行函数,将结果返回到 xml 调用并删除该实例。这可能吗?下一步如何推进?
最佳答案
您可以使用一个线程来负责更改文件,而不是跟踪锁定和解锁文件的所有线程。让每个线程发出将文件更改到并发队列的请求,然后通知 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();
}
关于java - 如何使用java将Thread实例保存在数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31048053/