gpt4 book ai didi

java - 用于生成名称的多线程

转载 作者:行者123 更新时间:2023-11-30 02:02:50 27 4
gpt4 key购买 nike

我正在为我的私有(private)服务器制作人工智能机器人。它们的名称必须是随机且唯一的,因此我创建了一个从网站检索随机字符串的函数。生成 3 个名称并将它们添加到数组列表需要一秒钟的时间。这意味着 10 分钟内我会得到 1800 个随机生成的字符串。

这有点糟糕,因为我需要在尽可能短的时间内生成大量名称,因此我创建了多个线程,可以在不到一分钟的时间内生成这 1800 个名称。但我不确定这是否是一个好的做法。

public static void init() {
for (int i = 0; i < 600; i++) {
new Thread("" + i) {
public void run() {
for (int j = 0; j < 3; j++) {
names.add(NameGenerator.generateRandomName(Utils.random(3, 12)));
}
}
}.start();
}
}

我认为这不是有效的,也不是最佳实践。

编辑:(添加功能)

public static ArrayList<String> names = new ArrayList<String>();

public static String generateRandomName(int length) {
String result;
try {
result = postURL("https://jimpix.co.uk/generators/word-generator.asp#result",
"go=yes&ul1=0&chars=" + length + "&match=1&numwords=1&alpha=0&lk=", 30000);
} catch (IOException e) {
Logger.logObject("Failed generating a new name");
return null;
}
result = result.substring(result.indexOf("check-username.asp?u=") + "check-username.asp?u=".length(),
result.indexOf("\"><span style=\"color:white;"));
return capitalizeFirstLetter(result);
}

最佳答案

我认为这不是使用线程的正确方法。线程用于处理诸如分别运行 GUI 和应用程序逻辑之类的事情,这样 GUI 就不会卡住。它们还用于运行单独的服务器和客户端线程。您实际上不会从本示例中的线程中受益。另外,如果不使用执行器,您将因为大量线程而耗尽内存(600 个是可以的,但应该避免和限制)。仅使用一个线程,以免阻塞主程序或根本不使用线程。

理论上,多核处理器的性能实际上会提高,但这取决于多种因素。

将您的代码更改为如下所示:

public static void init() {
new Thread(new Runnable() {
public void run() {
for (int i = 0; i < 600 * 3; i++) {
names.add(NameGenerator.generateName());
}
}
}).start();
}

此外,使用此示例时,请记住,线程是异步的,因此还提供某种回调函数,以便在重要时让您的程序注意到。

也使用同步收集。

关于java - 用于生成名称的多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52263126/

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