gpt4 book ai didi

java - 如何通知第二个线程变量的更改

转载 作者:行者123 更新时间:2023-12-03 13:09:05 24 4
gpt4 key购买 nike

我有两个线程。第一个更改变量Data的值。如果值已更改,第二个将打印该值。我试图做第二个线程只是在变量值每次更改时打印一次,但是我没有成功。有人可以帮我吗?

线程1

 class someservice{

volatile int data;
Boolean Flag = false;

public void mymethod(){

flag = true;

for (Integer i = 1; i < sheet.getRows(); i++) {

data = someMethod(); //this method when called return a new
//value
}

flag = false;
...
}
}

线程2
 Promise p = task {
try {

while (true) {

if (engineService.getFlag()) {

print(someservice.data);

}else{
break;
}
}
} catch(Throwable t) {
...
}
}

最佳答案

既然您提到Promises,我推断您对+ C++ 11 中的future/promise很熟悉

在Java中有一种类似的方法,将来可以调用...

public class HW5 {
public static void main(String[] argv) throws InterruptedException, ExecutionException {
FutureTask<Boolean> myFutureTask = new FutureTask<>(new Callable<Boolean>() {

@Override
public Boolean call() throws Exception {
// implement the logic here and return true if everything was
// ok, false otherwise.
Thread.sleep(5000);
System.out.println("dddd");
return System.currentTimeMillis() % 2 == 0;
}
});

ExecutorService executor = Executors.newFixedThreadPool(1);
executor.execute(myFutureTask);
Boolean result = myFutureTask.get();
System.out.println("Done!");
}
}

带有可调用对象的类中的FutureTask,该类可在其工作完成后返回对象...为了执行Future任务,您可以使用Executor服务,特别是调用execute方法,因为您需要等待线程执行做这个工作,那么有必要调用 Future.get ,它将基本上阻塞主线程,直到将来完成,以验证结果,只需读取变量 result ..

关于java - 如何通知第二个线程变量的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43478919/

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