Java - 使用成员函数启动线程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java - 使用成员函数启动线程相关的知识,希望对你有一定的参考价值。

我有一个扩展“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() { ... }
    ...
}

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

...你也写过,哪些你会把它放在花括号内。

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

以上是关于Java - 使用成员函数启动线程的主要内容,如果未能解决你的问题,请参考以下文章

使用成员函数启动线程

使用类构造函数在线程中启动成员函数

在单独的线程中使用参数启动成员函数

newCacheThreadPool()newFixedThreadPool()newScheduledThreadPool()newSingleThreadExecutor()自定义线程池(代码片段

c++ 如何在构造函数中启动一个线程,从命名管道读取数据?

在继承的类中启动线程