Java多线程:在扩展Thread的对象上调用方法

时间:2015-05-06 11:28:55

标签: java multithreading

一个非常基本的问题。

假设您有一个扩展Thread

的对象
class Car extends Thread {
    public void run() {
        // ...
    }

    public String doSomething() {
    }
}


class Main {
    public static void main(String[] args) {
      Car c = new Car();

      c.start();

      c.doSomething();
    }
}

c.doSomething()线程或主线程中会Car运行吗?

5 个答案:

答案 0 :(得分:2)

Thread实例在这方面并不特别。 doSomething将由调用线程执行。即使你从另一个线程调用start仍然将由调用线程执行。

答案 1 :(得分:0)

它将在调用该方法的线程上工作。作为旁注:在线程对象上调用run()而不是start()并期望它以异步方式运行是一个常见的新手错误。

答案 2 :(得分:0)

这是非常常见的场景。未使用start()方法调用线程意味着更少。

public static void main(String args[]){
new Car1().start();
new Car2().doSomething();//doSomething() will run in main Thread.
}


class Car1 extends Thread {
    public void run() {
        new Car2().start();// doSomething() will run in Car2 Thread.
        new Car2().run();// doSomething() will run in Car1 Thread.
        new Car2().doSomething();// doSomething() will run in Car1 Thread.
    }
}
class Car2 extends Thread {
    public void run() {
        doSomething();
    }

    public String doSomething() {
    }
}

答案 3 :(得分:0)

您必须通过调用start()手动启动线程。否则,您只需在同一个线程中使用Thread对象。

答案 4 :(得分:0)

问)c.doSomething()会在Car线程还是主线程中运行?

A)它将在主线程中运行。

将SOP放入doSomething方法

System.out.println(“\ n In DoSomething”+ Thread.currentThread()。getName());

会打印

在DoSomething主要