我现在已经使用线程2-3天了,我对方法有一个快速的问题。我正在创建一个Android应用程序,它从主UI线程开始(为了清楚起见,我们将其称为“UI线程”)。我正在使用以下代码生成一个新线程:
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
someMethod();
}
});
thread.start();
我的问题是,someMethod()
也会在我刚创建的新主题上运行,因为我是从那里调用的吗?或者它会在UI线程上运行吗?作为参考,someMethod()
位于创建新线程的方法之外。
如果someMethod()
无法在新主题上运行,我该怎么做呢?感谢。
答案 0 :(得分:6)
someMethod()也会在我刚刚创建的新线程上运行,因为我是从那里调用的吗?
是的,这正是发生的事情。该方法只是代码。它独立于在给定时间点恰好在其中运行的控制线程。这也意味着如果有多个cpu / core,可能会有多个线程在任何给定的时间点执行该代码。
答案 1 :(得分:1)
run
所采取的所有操作(包括调用someMethod
)都保留在新的Thread
上,除非该代码告诉Java在另一个线程中运行某些内容(例如invokeLater
或者使用Executor
)。
答案 2 :(得分:1)
您应该查看Callable<V>
和Future<T>
,在那里您可以调用在调用线程上不处理的方法。你现在不应该使用线程。
现有更多的现代方法。
这是一个可以给你一个想法的链接http://www.vogella.com/articles/JavaConcurrency/article.html#futures