[英]What happens when- A. Activity method is called from Runnable B. Multiple threads call Activity method simultaneously
对于问题的第一部分,请考虑以下伪代码。
public class Main extends Activity {
.
.
// all necessary overridden methods
.
.
Button.onClick() {
(new Task()).run();
}
public void myMethod() {
// do something here
}
public class Task extends Runnable {
@Override
public void run() {
myMethod();
}
}
}
我不是Java或任何其他编程语言的专家,所以我无法理解单击Button
时如何执行myMethod()
方法。 myMethod()
是否将在Runnable
的单独Thread
中作为方法的单独“实例”执行? 否则它将在UI Thread
内执行,因为它是我的Activity
类的一部分。
现在,对于问题的第二部分,请考虑以下伪代码。
public class Main extends Activity {
.
.
// all necessary overridden methods
.
.
Button.onClick() {
(new TaskOne()).run();
(new TaskTwo()).run();
}
public void myMethod() {
// do something here
}
public class TaskOne extends Runnable {
@Override
public void run() {
for(int i=0; i<20; i++) {
myMethod();
Thread.sleep(2000);
}
}
}
public class TaskTwo extends Runnable {
@Override
public void run() {
for(int i=0; i<20; i++) {
myMethod();
Thread.sleep(2000);
}
}
}
}
如果myMethod()
由于它是Activity
的一部分而在UI线程中运行,那么当两个Runnable
实例同时调用该方法时会发生什么? 我很混乱。 每个Runnable
实例都将执行该方法的单独“实例”,否则,将发生什么? 每个线程都会等待对方对myMethod()
的执行吗?
我的困惑来自尝试实现LoaderManager.LoaderCallbacks
。 如果什么onLoadFinished()
被调用,而onLoadFinished()
已经由于连续的数据库更新运行?
我希望这篇文章适合在StackOverflow上发表。 如果不是,我会立即将其删除。 谢谢你的帮助。 我真的很感激。
1)它将在单独的线程(不是UI线程)中运行;
2)会有比赛情况。 两个线程将同时调用myMethod()
。 为防止可能的错误,您将必须使myMethod()
synchronized
或在某些对象的方法内部添加synchronized
块。
如果正确启动新线程,所有这些都会发生或发生:)现在您在Runnable
上调用run()
,这不是正确的方法。 您应该使用(new Thread(new TaskOne())).start();
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.