gpt4 book ai didi

java - 使用线程以不同间隔输出消息

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

目前正在尝试执行以下任务:有 10 条消息以不同的时间间隔输出到控制台,而前面的消息不会停止工作。

因此,就我的输出而言,我正在寻找类似于

的内容

消息0

消息1

消息0

消息2

消息0

消息1

消息3

需要使用线程来完成此任务,老实说,我真的不知道我在做什么。下面的代码看起来可以做到这一点,但它的输出只是一团糟,无法产生所需的结果。

public class Task {
public static void main(String[] args) throws InterruptedException {
Integer[] intarr = IntStream.range(3, 13).map((i)->i*1000).boxed().toArray(Integer[]::new);
String[] strings = {
"msg0", "msg1", "msg2", "msg3", "msg4",
"msg5", "msg6", "msg7", "msg8", "msg9"

};
Task test = new Task(strings, intarr);

}
Spam(String[] msgs, Integer[]millis) throws InterruptedException {
Map<String, Integer> msgsmap = IntStream.range(0, msgs.length).
boxed().collect(Collectors.toMap(i-> msgs[i],i->millis[i]));
for(String msg:msgs){
Thread t = new Thread(()-> {
while(true) {
System.out.println(msg);
try {
Thread.sleep(msgsmap.get(msg));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
t.start();
}
}

最佳答案

假设您不需要自己创建线程,我会利用ScheduledExecutorService:

String[] strings = {
"msg0", "msg1", "msg2", "msg3", "msg4",
"msg5", "msg6", "msg7", "msg8", "msg9"
};

ScheduledExecutorService service = Executors.newScheduledThreadPool(strings.length);

IntStream.range(0, strings.length).forEach(i -> service.scheduleAtFixedRate(() -> {
System.out.println(strings[i]);
}, i + 3, i + 1, TimeUnit.SECONDS));

我曾经能够实现您想要的输出,但是让 10 个线程始终协作并不是最简单的任务。不过,您可以随意将延迟更改为您想要的任何值。

如果您需要自己创建线程,我会更改我的答案。

关于java - 使用线程以不同间隔输出消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49888615/

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