我已经使用线程2-3天了,我有一个关于方法的快速问题。我正在制作一个Android应用程序,它从主UI线程开始(为了清晰起见,我们把它称为"UI线程“)。我正在使用以下代码生成一个新线程:
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
someMethod();
}
});
thread.start();我的问题是,someMethod()是否也会在我刚刚创建的新线程上运行,因为我是从那里调用它的?或者它会在UI线程上运行?作为参考,someMethod()位于创建新线程的方法之外。
如果someMethod()不会在新线程上运行,我如何使它运行?谢谢。
发布于 2013-09-11 22:43:51
someMethod()是否也会在我刚刚创建的新线程上运行,因为我是从那里调用它的?
是的,事情就是这样的。方法就是代码。它独立于控制线程,而控制线程恰好在给定的时间点和时间内运行。这也意味着,如果有多个cpu/核,那么在任何给定的时间点都可能有多个线程执行该代码。
发布于 2013-09-11 23:34:13
您应该看看Callable<V>和Future<T>,在那里您可以调用方法,它们是在调用线程上处理的而不是。不管怎么说,你现在不应该和线程打交道。有更多的现代方法可用。
这里有一个链接,可以为您提供一个想法,http://www.vogella.com/articles/JavaConcurrency/article.html#futures
发布于 2013-09-11 22:45:00
run所采取的所有操作,包括调用someMethod,都保留在新的Thread上,除非该代码告诉Java在另一个线程中运行某些东西(比如使用invokeLater或使用Executor)。
https://stackoverflow.com/questions/18752501
复制相似问题