Метод Java Thread's run() вызывается JVM в этом потоке, когда начинается поток. Чтобы дать потоку что-то сделать, вы можете создать подкласс Thread и переопределить его метод run() или (предпочтительно), вы можете предоставить Runnable в конструктор потока. Хорошо.Почему Thread реализует Runnable?
Я был посреди создания подкласса Thread и overriding run, и я понял, что не могу сделать метод защищенным, как я ожидал, потому что Thread.run() является общедоступным. Тогда я понял, почему: он должен быть общедоступным, потому что Thread реализует Runnable. Но почему он реализует Runnable?
Это не кажется логичным. Поток startable (из текущего потока), но вы не запускаете его так же, как вы запускаете() Runnable (из текущего потока); нить работает сама по себе (по собственной теме). Если вы вызываете метод run Thread, то вы не используете его как Thread, просто супертяжелый Runnable.
Из-за конструкции любой код, имеющий доступ к объекту Thread, может вызывать его метод публичного запуска и потенциально вызывать код, который не предназначен для публичного или предназначенного для вызова таким образом. Это также позволяет очень специфические вещи, как это:
Thread.currentThread.run();
Есть ли законное использование для Thread реализующего Runnable, что я не вижу?
@cHao - Если вы поняли историю и цели Java (в частности, цель запуска кода, которому много десятилетий), вы поймете, что они делают все возможное, что по-человечески возможно в сложившихся обстоятельствах. –