gpt4 book ai didi

java - 监听器和线程

转载 作者:太空宇宙 更新时间:2023-11-04 09:57:49 25 4
gpt4 key购买 nike

我觉得这可能是一个愚蠢的问题,但我对听众没有那么丰富的经验......无论如何,我有一个关于线程和听众的问题;考虑这段代码(语法上可能不正确,这是我突然想到的):

public class Stuff {
private SimpleLongProperty time = new LongProperty(this, "time");
private Executor execute;

public Stuff(Clock clock) {
time.bind(clock.getValue);
execute = Executors.newFixedThreadPool(5);
}

public void someAction() {
for(int i = 0; i < 5; i++) {
execute.execute(scheduleTask());
}
}

public Runnable scheduleTask() {
time.addListener((obs, oldV, newV) -> {
//Code here
});
}
}

当调用 someAction() 并调用 ScheduleTask() 5 次以添加 5 个监听器时,当时间更新时,每个监听器是否会在自己的线程内执行代码?或者它会执行主线程中的代码,因为那是时间所在的地方?

最佳答案

能够在工作站上编写代码并进行测试,找到了我的答案。

public class Stuff {
private LongProperty time = new SimpleLongProperty(this, "time");
private Executor execute;

public Stuff(Clock clock) {
time.bind(clock.getValue);
execute = Executors.newCachedThreadPool(runnable -> {
Thread t = new Thread(runnable);
t.setDaemon(true);
return t;
});
}

public void someAction() {
for(int i = 0; i < 5; i++) {
execute.execute(scheduleTask(i));
}
}

public Runnable scheduleTask(int i) {
time.addListener((obs, oldV, newV) -> {
System.out.println("Task " + i + ": " + Thread.currentThread());
});
}
}

上面的代码将打印:

Task 0: Thread[JavaFX Application Thread, 5, main]
Task 1: Thread[JavaFX Application Thread, 5, main]
Task 2: Thread[JavaFX Application Thread, 5, main]
Task 3: Thread[JavaFX Application Thread, 5, main]
Task 4: Thread[JavaFX Application Thread, 5, main]

将 someAction() 和 ScheduleTask() 函数更改为如下所示:

public void someAction() {
for(int i = 0; i < 5; i++) {
scheduleTask(i);
}
}

public void scheduleTask(int i) {
Runnable test = () -> {
System.out.println("Task " + i + ": " + Thread.currentThread());
};
time.addListener((obs, oldV, newV) -> {
execute.execute(test);
});
}

将产生以下结果:

Task 0: Thread[Thread-16, 5, main]
Task 1: Thread[Thread-17, 5, main]
Task 2: Thread[Thread-20, 5, main]
Task 3: Thread[Thread-19, 5, main]
Task 4: Thread[Thread-18, 5, main]

关于java - 监听器和线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53874525/

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