是从一个单独的线程调用的方法,在调用线程上运行?

时间:2013-09-11 22:42:44

标签: java multithreading methods

我现在已经使用线程2-3天了,我对方法有一个快速的问题。我正在创建一个Android应用程序,它从主UI线程开始(为了清楚起见,我们将其称为“UI线程”)。我正在使用以下代码生成一个新线程:

Thread thread = new Thread(new Runnable() {
    @Override
    public void run() {
        someMethod();
    }

});
thread.start();

我的问题是,someMethod()也会在我刚创建的新主题上运行,因为我是从那里调用的吗?或者它会在UI线程上运行吗?作为参考,someMethod()位于创建新线程的方法之外。

如果someMethod()无法在新主题上运行,我该怎么做呢?感谢。

3 个答案:

答案 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