gpt4 book ai didi

java - 如果返回值取决于阻塞操作的结果,方法是否会阻塞?

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

我在继承Thread类的类中写了如下方法:

protected File createFile(String fileName){
try {
File file = new File(fileName);
if(!file.exists())
file.createNewFile();
else{
file.delete();
file.createNewFile();
}
file.mkdirs();
return file;
}catch (IOException e) {
e.printStackTrace();
return null;
}
}

一旦线程已经启动,它将从 Activity 中调用。如果我从我的 Activity 中这样做:

File logFile = mThread.createFile("/Logs/test.txt");
if(logFile!=null)
//do something
else
//do something else

在创建文件之前它会阻塞吗?

最佳答案

是的,它会阻塞。

重要的不是调用方法的类,而是 run()调用它的线程的方法。很有可能是

File logFile = mThread.createFile("/Logs/test.txt");
if(logFile!=null)
//do something
else
//do something else

从您的 Activity 中调用 run方法(由 android 处理),并且直接从另一个线程类调用方法不会神奇地使该线程运行该方法。

确保您不会用此 createFile 阻止您的 Activity 方法你应该使用消息传递机制,这样createFilerun() 中调用非 Activity 线程的方法。

参见 this post 中的示例了解如何在线程之间传递消息。总而言之,您的 Activity 线程将从您的其他线程设置一个变量。此线程定期检查此变量并根据它执行操作。这是主要思想,但还有很多内容需要阅读 on the web关于线程安全和在这些情况下出现的其他问题。

关于java - 如果返回值取决于阻塞操作的结果,方法是否会阻塞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12174350/

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