Я работаю над проектом Java с моей командой на работе. Подводя итог, у нас есть основной класс, который имеет метод, который создает экземпляр и вызывает класс «Сохранить». Этот класс «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 ()?
Каким было бы хорошее решение этой проблемы? Нужно ли изменить класс «Сохранить», чтобы он реализовал Runnable?
Если вам нужно больше деталей, пожалуйста, дайте мне знать. Спасибо за понимание!
Обновление: Спасибо всем за помощь! Эти решения пригодятся в будущем.