Меня смущает следующее:
Самый простой способ использовать потоки в программе Java — расширить класс Thread и реализовать интерфейс runnable (или просто реализовать runnable).
Запустить выполнение потока. мы должны вызвать метод start() потока, который, в свою очередь, вызывает метод run() потока. Итак, поток запускается.
Метод start() (если я не ошибаюсь) должен вызываться точно и только один раз для каждого потока. В результате экземпляры потоков не могут быть повторно использованы, если только сам метод run не запускается в некотором смысле, если не считать бесконечного цикла, что облегчает пользовательскую реализацию повторного использования потока.
Теперь документ javadoc текст ссылки говорит
Вызовы для выполнения будут повторно использовать ранее созданные потоки, если они доступны.
Я не понимаю, как это реализовано. Я предоставляю в методе выполнения метода исполнителя свой собственный поток, например.
ExecutorService myCachedPool = Executors.newCachedThreadPool();
myCachedPool.execute(new Runnable(){public void run(){
//do something time consuming
}});
Как можно повторно использовать этот пользовательский поток, который я делегирую инфраструктуре исполнителя?
Разрешено ли исполнителю вызывать метод start() более 1 раза, в то время как мы не можем этого делать в наших программах? Я что-то неправильно понимаю?
Спасибо.