gpt4 book ai didi

java - 帮助在 Java 中实现 Runnable

转载 作者:行者123 更新时间:2023-11-29 09:46:22 25 4
gpt4 key购买 nike

我正在和我的团队一起开发一个 Java 项目。总而言之,我们有一个主类,它有一个实例化和调用“保存”类的方法。这个“保存”类使用几个构造函数和一些可见和不可见的方法将文件保存回服务器。该类是 CPU 密集型且耗时的,这会阻止主应用程序显示进度条对话框窗口,让用户了解保存的状态。他们要求我修改“Save”类,使其产生自己的线程,这样主应用程序的其余部分就可以完成向用户显示信息的较小任务。

这是它的一般概念:

class MainApp{  
...

private void doSave()
{
Save s = new Save();
StatusWindow sw = new StatusWindow();

if save_this
s.saveThis(sw);
if save_that
s.saveThat(sw);

...
}
...
}

class Save{
...

public void saveThis(StatusWindow s)
{
//alot of code
s.update;

}
public void saveThat(StatusWindow s)
{
//alot of code
s.update;
}
... // some non-visible methods, even more code
}

我目前是 Java 线程的新手,但我对它们的工作原理有基本的了解。据我了解,一个实现Runnable的类,当它被实例化为一个新线程时,会执行run()方法。问题是,由于对于不同类型的文件,不同类型的保存有不同的方法,那么如何将这些方法实现到 run() 方法中呢? run() 方法是在新线程中实例化类并在其上调用 .start() 时执行的唯一方法吗?

什么是解决这个问题的好方法?是否需要重新设计“Sa​​ve”类以使其实现 Runnable?

如果需要更多详细信息,请告诉我。感谢您的任何见解!

更新:感谢大家的帮助!这些解决方案将在未来派上用场。

最佳答案

最简单的方法是为每个创建一个可运行的。不要将参数传递给运行,而是将它们设为实例字段。

class SaveThatCommand implements Runnable {
private final StatusWindow s;
//constructor that initializes s
public void run() {
//save that code
s.update();
}
}

根据您的要求,更简单的方法是创建一个匿名内部类

public void doSave(final StatusWindow s) {
if (saveThis) {
Thread t = new Thread( new Runnable() {
public void run() {
saveThis(s);
}
});
t.start();
}
//...
}

而且你有点不正确:run 方法在传递到 Thread 的构造函数时执行 然后在该线程上调用 start()

关于java - 帮助在 Java 中实现 Runnable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3772939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com