Вопрос по warnings, multithreading, sleep, java, eclipse – Java: Thread.currentThread (). Sleep (x) против Thread.sleep (x)

78

У меня есть это в моем коде

Thread.currentThread().sleep(x);

Затмение говорит мне использовать статический

Thread.sleep(x); 

вместо этого почему? Какие'Есть ли разница, есть ли какая-то разница в функциональности между этими двумя методами?

там'сСохранить действие » в Eclipse, который автоматически заменит статический доступ к членам через переменные экземпляра статическим доступом через имя класса - включите это действие сохранения и столько других действий сохранения, сколько вы согласны (например, удалите ненужные приведения, ненужные »этот', так далее.). les2

Ваш Ответ

4   ответа
126

Есть только один метод, а не два, и он статический. Хотя вы можете вызывать статический метод через ссылку на экземпляр, он 'не очень хороший стиль. Это означает, что программист думает, что он или она вызывает метод экземпляра. Запутанный программист может подумать, что он или она может заставить другой поток (не текущий) спать таким образом, когда это 'не то, что он делает.

Обе ваши строки кода делают то же самое, но вторая - лучший стиль.

+1 к упоминанию о том, что программист может захотеть перевести определенный поток в спящий режим с помощью someThread.sleep (), чего он не делает. Chii
29

В Java сон является статическим методом. Оба ваших примера делают одно и то же, но прежняя версия сбивает с толку, потому что похоже, что она вызывает метод для определенного объекта, но это 'не делает этого вообще. В вашем примере это победилоЭто не имеет большого значения, но это опаснее, если у вас есть следующее:

someOtherThread.sleep(x);

На этот раз похоже, что вы говорите другому потоку о том, что он спит, но на самом деле вы переводите текущий поток в спящий режим. Чтобы избежать ошибок такого типа, всегда вызывайте статические методы, используя класс, а не конкретный объект.

Вы имеете в виду, что currentThread и someOtherThread перейдут в спящий режим при выполнении этой единственной строки?someOtherThread.sleep (х);» ?? Kanagavelu Sugumar
Нет. Текущий поток перейдет в спящий режим независимо от того, какой объект Thread .sleep вызывается. Вы можете'усыпить другие темы (вот так). Torque
0

Thread.currentThread().sleep(x); или путьЗатмение говорит такThread.sleep(x); Статический контекст необходим, если он в этом нуждается, поэтому мы немного задерживаемся с этим сном.

Статическая парадигма, устанавливаемая одним объектом, влияет только на этот жизненный цикл печати кучи объекта, опять же, учитывая, что статический жизненный цикл объекта не является таким уж утомительным, при необходимости его можно использовать для облегчения кодирования, но делать это осторожно, как статический печать отсылаетсяClass (например:-Class.forName(pkg.className)) как по имени а не по любомуobject которая является единственной печатной копией класса во время выполненияHEAP объем памяти.

Опять же, использование объекта также имеет свои плюсы минусы от Weak, Phantom, Strong вид ссылок ....,

Код запутан природой. Это просто способ, которым мы делаем, чтобы это работало и функциональны.

Если говорить о потоке, - он порождается асинхронно, хотя у нас могут быть синхронные вещи в потоке. По своей природе все вещи асинхронны, хотя иногда мы находим вещи синхронные. Ничто из этого не является синхронным, даже если мы вмешиваемся в квантовую или астрономию. Dev Anand Sadasivam
3

Два вызова метода идентичны по поведению, потому что они вызывают один и тот же метод, но с использованием имени класса (Нить в данном случае), а не экземпляр для доступа к статическим полям и методам, проясняет эту статичность. Вот почему это предупреждение производится.

Но учитывая, что статические поля и методы в большинстве сред IDE отображаются особым образом (например, курсивом в Eclipse и IntelliJ IDEA), необходимо ли это предупреждение? Может быть, это не так необходимо, как в первые дни Java, когда использовались простые редакторы.

Похожие вопросы