首页 > 解决方案 > Java - 使用成员函数启动线程

问题描述

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

如果我创建一个子类的对象并在该对象上调用 saveData() 会发生什么?

标签: javamultithreading

解决方案


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

Ajava.lang.Thread不是线程,就像java.awt.Window实例不是窗口一样。线程和窗口属于操作系统,对应的 Java 对象是您用来与操作系统交互的“句柄”。Thread调用创建新操作系统线程的方法t.start()

假设你定义了一个扩展类Thread

class MyThread extends Thread {
    ...
    public void saveData(...) { ... }
    ...
}

如果我创建子类的对象并在该对象上调用 saveData() 会发生什么。?

你问我们?但是写方法的人!!当您的程序调用my_thread.saveData(...)时,就像调用您在定义的任何其他类中编写的任何其他方法一样。你是编写方法的人。它会做任何你放在花括号里的东西。


这个类唯一有点神奇的Threadstart()方法。如果你这样写:

class MyClass extends Thread {
    ...
    public void saveData(...) { ... }
    public void run() { ... }
    ...
}

那么当你的程序调用时new MyThread().start(),start方法会“神奇地”创建一个新线程,新线程会调用该run()方法...

...你也写了,它会做你放在花括号里的任何东西。

如果你想saveData()在新线程中被调用,那么确保它是从run()方法中的某个地方调用的。


推荐阅读