java - Java - 使用成员函数启动线程
问题描述
我有一个扩展“线程”类的类。这个子类已经实现了 run() 方法。但是是否可以在同一个子类中创建另一个用户定义的方法(比如 saveData(Object obj)),而不是调用 start() 方法,调用 saveData() 来创建一个新线程并执行方法 saveData 中的指令()。
如果我创建一个子类的对象并在该对象上调用 saveData() 会发生什么?
解决方案
该类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(...)
时,就像调用您在定义的任何其他类中编写的任何其他方法一样。你是编写方法的人。它会做任何你放在花括号里的东西。
这个类唯一有点神奇的Thread
是start()
方法。如果你这样写:
class MyClass extends Thread {
...
public void saveData(...) { ... }
public void run() { ... }
...
}
那么当你的程序调用时new MyThread().start()
,start方法会“神奇地”创建一个新线程,新线程会调用该run()
方法...
...你也写了,它会做你放在花括号里的任何东西。
如果你想saveData()
在新线程中被调用,那么确保它是从run()
方法中的某个地方调用的。
推荐阅读
- c++ - 通过 tcp 从 Dart 发送 4bytes 浮点值到 C++
- java - 无法解析“JsonPath”中的“读取”方法
- django - 如何更新现有数据并创建新的 django base 命令?
- node.js - 有没有办法从 nodejs 中的 async/await 返回数据
- google-colaboratory - OpenCV 预装在 google colab 中,但我无法从 opencv contrib 添加额外的模块。还是一样 - 没有这样的文件或目录
- c++ - C++用不同的分隔符读取两个不同的文件
- python - 如何将此递归解决方案转换为 DP 解决方案?
- nuget - 有没有办法使 NuGet 包不可更新?
- pandas - 如何在 matplotlib 上将两个不同的熊猫数据框绘制成一张图表?
- html - HTML/CSS - 具有视差效果的图像上的图像