4

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

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

});
thread.start();

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

如果someMethod()不会在新线程上运行,我该如何让它这样做?谢谢。

4

3 回答 3

6

someMethod() 是否也会在我刚刚创建的新线程上运行,因为我从那里调用它?

是的,这正是发生的事情。该方法只是代码。它独立于在给定时间点恰好在其中运行的控制线程。这也意味着如果有多个 cpu/核心,则在任何给定时间点都可能有多个线程执行该代码。

于 2013-09-11T22:43:51.840 回答
2

您应该看一下Callable<V>and Future<T>,在那里您可以调用在调用线程上处理的方法。无论如何,您现在都不应该使用线程。有更现代的方法可用。

这是一个应该给你一个想法的链接http://www.vogella.com/articles/JavaConcurrency/article.html#futures

于 2013-09-11T23:34:13.500 回答
1

由 执行的所有操作run,包括调用someMethod,都保留在 new 上,Thread除非该代码告诉 Java 在另一个线程中运行某些东西(例如使用invokeLater或使用Executor)。

于 2013-09-11T22:45:00.580 回答