Мой вопрос касается многопоточности в Java. Я перевожу приложение, написанное в Visual Basic 2008, на Java. В VB есть класс BackgroundWorker , который позволяет кодировщику выполнять задачу в другом потоке, во многом как SwingWorker
в Java. Единственное отличие состоит в том, что поток BackgroundWorker
равен run()
и запускает событие с именем DoWork()
на главной линии, которое содержит код для выполнения в фоновом режиме. Кроме того, после выполнения кода событие RunWorkerCompleted()
отправляется обратно в поток переднего плана для интерпретации результатов.
Мне показалось, что установка BackgroundWorker
весьма полезна, и она кажется немного более гибкой, чем SwingWorker
, и мне просто было интересно, можно ли (и приемлемо) запускать события таким же образом в Java? И если так, как бы я поступил об этом? Поскольку я только сделал быстрое сканирование на SwingWorker
, вполне возможно, что он имеет аналогичную функциональность, которая будет работать так же хорошо, и в этом случае я был бы рад узнать об этом вместо этого.
Приветствия
шумиха
EDIT:
Kewl. Приветствия, ребята, спасибо за быстрые ответы и извинения за мой довольно медленный ответ. Я поделюсь с вами вашей идеей, Оскар, извините, коберд, я не совсем поняла - приветствуются любые дальнейшие объяснения (возможно, пример).
Напомню: я хочу иметь исполняемый класс, экземпляр которого создаю в своем коде. У класса runnable есть два события, одно из которых запускается из фонового потока и содержит код для запуска в фоновом режиме (DoWork()
), а другое событие вызывается в потоке переднего плана после того, как фоновый поток завершил свою задачу ( RunWorkerCompleted()
).
И если я правильно понимаю ваш совет, я могу запустить событие DoWork()
из метода runnable class 'run()
, чтобы оно выполнялось в фоновом потоке, а затем я могу использовать метод SwingUtilities.invokeLater()
для инициировать событие RunWorkerCompleted()
в потоке переднего плана, как только фоновый поток завершит выполнение.
Да