gpt4 book ai didi

java - 多线程环境中的循环列表

转载 作者:行者123 更新时间:2023-12-01 09:56:44 24 4
gpt4 key购买 nike

我编写了一个表现为循环的方法。每次有人调用它时,它都会从列表中返回一个整数。当到达列表末尾时,它从头开始提供服务。

我从无状态 session bean 调用此方法。

该方法是在如下所示的 util 类中编写的

public final class MyUtil {

private static int index;

private MyUtil() {}

public synchronized static int getNextInt() {
Properties p = DBconfigModule.getProperties("key");
List<String> list = Arrays.asList(((String) p.get("key")).split(","));
try {
if(index>=list.size()) {
index = 0;
next = list.get(0);
index++;
} else {
next = list.get(index):
index++;
}
} catch(final Exception e) {
// log
index = 0;
next = list.get(0);
index++;
}
return Integer.parseInt(next);
}

@Stateless
public class Usage {
public int getNextInt() {
return MyUtil.getNextInt();
}
}

我不确定我所写的内容在多大程度上是正确的并且会起作用。

谁能告诉我这是对的,并建议我是否可以改进?

我不想为此使用任何 3pp 库。

谢谢。

最佳答案

仅当 list 从未更改或对列表的访问与同一监视器同步时,您的代码才是正确的。

想象一下执行以下代码时会发生什么:

Thread 1                           Thread 2
------------------- -----------------------
// index = 2
// list.size() = 3
if (index == list.size()) {

// Removes first element
// now list.size() = 2
list.remove(0);


} else {
// Will throw an exception
// Because now list has size 2
// and the third element (index 2)
// doesn't exists
next = list.get(index);

关于java - 多线程环境中的循环列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37161386/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com