一个非常基本的问题。
假设您有一个扩展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
运行吗?
答案 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主要