Java: Поток.currentThread().сон (x) против потока.сон(х)


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

Thread.currentThread().sleep(x);

затмение говорит мне, чтобы использовать статический!--3-->

Thread.sleep(x); 

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

4 72

4 ответа:

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

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

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

someOtherThread.sleep(x);

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

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

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

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

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

опять же использование объекта также имеет плюсы и минусы слабыми, фантомными, сильными ссылками....,

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