Java-具有成员函数的启动线程

Java-具有成员函数的启动线程,java,multithreading,Java,Multithreading,我有一个类扩展了“线程”类。此子类已实现run()方法。但是是否可以在同一子类中创建另一个用户定义的方法(比如saveData(Object obj)),而不是调用start()方法,而是调用saveData()来创建一个新线程并执行saveData()方法中的指令 如果我创建子类的对象并对该对象调用saveData(),会发生什么情况?java.lang.Thread类与任何其他java类没有本质上的区别。它有方法,当你调用它们时,它们会做它们所做的事情 java.lang.Thread不是线

我有一个类扩展了“线程”类。此子类已实现run()方法。但是是否可以在同一子类中创建另一个用户定义的方法(比如saveData(Object obj)),而不是调用start()方法,而是调用saveData()来创建一个新线程并执行saveData()方法中的指令


如果我创建子类的对象并对该对象调用saveData(),会发生什么情况?

java.lang.Thread类与任何其他java类没有本质上的区别。它有方法,当你调用它们时,它们会做它们所做的事情

java.lang.Thread
不是线程,与
java.awt.Window
实例不是窗口完全相同。线程和窗口属于操作系统,相应的Java对象是用于与操作系统接口的“句柄”。创建新操作系统线程的
Thread
方法称为
t.start()

假设您定义了一个扩展
Thread

class MyThread extends Thread {
    ...
    public void saveData(...) { ... }
    ...
}
如果创建子类的对象并对该对象调用saveData(),会发生什么情况

你在问我们?但是你就是写这个方法的人!!当您的程序调用my_thread.saveData(…)时,这就像调用您在定义的任何其他类中编写的任何其他方法一样。你就是写这个方法的人。它可以做任何你放在卷曲的牙套里的事


Thread
类唯一有点神奇的地方是
start()
方法。如果你这样写:

class MyClass extends Thread {
    ...
    public void saveData(...) { ... }
    public void run() { ... }
    ...
}
然后,当程序调用
newmythread().start()
时,start方法将“神奇地”创建一个新线程,新线程将调用
run()
方法

…你也写了,它会做任何你放在它的花括号里的事


如果希望在新线程中调用
saveData()
,请确保从
run()
方法中的某个位置调用它。

除非调用start方法,否则实际的线程将永远不会存在,如果在对象上调用saveData方法,它将只是当前运行的线程中的正常调用。