Я делаю анимацию. Я создаю кучу изображений, и я хочу добавить их в gif-кодер. Поскольку процесс добавления может занять некоторое время, я хочу, чтобы это было сделано в отдельном потоке. Моя идея была бы сделать это:Выполнить методы в потоке
public class MyThread implements Runnable {
private AnimatedGifEncoder encoder = new AnimatedGifEncoder();
public void run() {
encoder.start("MyFile.gif");
}
public void addFrame(BufferedImage img) {
encoder.add(img);
}
}
Тогда я бы назвал метод addFrame()
из основного класса каждый раз, когда кадр должен быть добавлен. Однако, когда я подумал об этом, я пришел к выводу, что это не так, как это работает.
Другая идея состоит в том, чтобы создать новый объект потока каждый раз добавляется кадр:
public class MyMainClass {
while (generating) {
BufferedImage img = generateImg();
new Thread(() -> {
encoder.addFrame(img);
}).start();
}
}
Однако, мне это кажется очень тяжелым способом, чтобы сделать это.
Мой вопрос: Что такое лучший способ достичь этого? Если этого не происходит, идея создания нового объекта Thread
действительно тяжелая?
О вашей первой идее: ваш класс 'MyThread' - это _not_ нить. Это просто класс с методами с именем 'run()' и 'addFrame (...)'. Когда ваша программа выполняет 'новый поток (myThread).start() ', новый поток будет вызывать' myThread.run() '. И если ваш основной поток позже вызывает 'myThread.addFrame (...)', ну, это происходит в основном потоке_ и _not_ в новом потоке. –
@jameslarge Я забыл указать, что я это сделаю. В любом случае, спасибо за то, что он не сработает! – Creator13