Метод сна потоков SCJP()

Я читаю SCJP. Читая Threads, я прочитал о методе sleep(). Но вот этой фразы я не понимаю. Помогите мне, пожалуйста

«Помните, что sleep() — это статический метод, поэтому не думайте, что один поток может усыпить другой поток».

Некоторые методы могут выглядеть так, как будто они сообщают другому потоку о блокировке, но это не так. Если у вас есть ссылка "t" на другой поток, вы можете написать что-то вроде этого: t.sleep() , t.yield() Но на самом деле это static методы класса Thread — они не влияют на экземпляр t; вместо этого они определены так, чтобы всегда влиять на поток, который выполняется в данный момент.


person user2985842    schedule 29.01.2014    source источник
comment
На самом деле не имеет отношения к темам. Это общая разница между статическим методом и методом экземпляра, которую вы должны изучить, чтобы понять эту фразу.   -  person zapl    schedule 29.01.2014


Ответы (2)


Это говорит о том, что хотя вы можете вызывать эти методы [yield(), sleep()] для экземпляров Thread, эти экземпляры не будут затронуты, потому что метод sleep() является статическим методом. Будет затронут только текущий исполняемый поток, а не экземпляр, для которого вы вызываете метод sleep()

Api говорит

Заставляет текущий исполняемый поток спать

Вы можете это сделать, так как вы вызываете методы для экземпляров и переводите их в спящий режим, но это не так.

person Abimaran Kugathasan    schedule 29.01.2014
comment
так вы имели в виду, когда у меня есть нестатические методы, и я вызываю их через переменную ссылки на объект, это влияет на переменную? ? ? если да, то как? можете ли вы предоставить мне какой-либо пример - person user2985842; 29.01.2014
comment
@user2985842 user2985842: Это зависит от метода, влияет ли он на вызывающий экземпляр или нет. - person Abimaran Kugathasan; 29.01.2014

При вызове статического метода экземпляр, на который он вызывается, не влияет, будь то Thread.sleep или, скажем, String.valueOf. Например, вы можете написать String.valueOf(17), но вы также можете написать "123".valueOf(17) — выглядит странно, но результатом будет «17» в обоих случаях, без учета «123» во втором случае.

Точно так же Thread.sleep() – это статический метод, который всегда переводит в спящий режим текущий поток, из которого вызывается этот метод. С помощью этого метода невозможно управлять каким-либо другим потоком, даже если для программиста, который не понимает статические методы это может показаться возможным.

person Audrius Meskauskas    schedule 29.01.2014