方法是否包含在线程中?

时间:2014-07-02 00:50:51

标签: java android multithreading

这个问题的意思是,如果我有一个运行某些代码的线程,并且该代码使用了一个不在线程中的方法,那么该方法也在同一个线程中运行。这是我正在谈论的代码示例。这是一个使用android的例子,但我猜这同样适用于java。

                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        //Logic

                        randomMethod();
                    }
                }).start();

然后随机方法:

    public void randomMethod()
{
    //This method is not wrapped in a thread.
}

randomMethod()是否与调用它的线程一起运行,或者它是一个单独的线程?

3 个答案:

答案 0 :(得分:1)

方法在调用者的上下文中运行。您始终可以使用Thread#currentThread()检查您的主题ID,例如

// How to get the current thread id and name
Thread t = Thread.currentThread();
System.out.printf("Thread: %d - %s%n", t.getId(), t.getName());

注意:常规Java应用程序在main线程上启动(ID为#34; 1")。

答案 1 :(得分:0)

您所指的是Java中的Anonymous class。通过这种方式,Thread实例可以访问父类中的所有方法(甚至是私有),因此您可以调用randomMethod(),但是这个方法将在匿名类上下文中调用 - 在您的情况下 - 在单独的线程中

如此简短的回答你的问题 - 是的,方法将在一个单独的线程中运行

答案 2 :(得分:0)

“线程”一词在Java中有两个含义:线程(小t)是通​​过代码执行的路径。 Thread(big T)是一个Java标准库类,其中包含可用于创建和管理小线程的方法。

方法属于类。属于Thread类的方法(不计算其私有方法)正是该类的javadoc中描述的那些方法:http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html

Little-t线程调用方法,但它们不拥有它们。程序中的任何(小-t)线程原则上都可以调用程序中的任何方法。它是否真的完全取决于你。