有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

带成员函数的多线程Java启动线程

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

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


共 (1) 个答案

  1. # 1 楼答案

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

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

    假设您定义了一个扩展Thread

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

    what would happen if I create an object of the child class and call saveData() on that object.?

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


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

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

    然后,当程序调用new MyThread().start()时,start方法将“神奇地”创建一个新线程,新线程将调用run()方法

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

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