powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / synchronized (Thread.currentThread() ) есть ли смысл?
25 сообщений из 28, страница 1 из 2
synchronized (Thread.currentThread() ) есть ли смысл?
    #38610890
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
встретил в коде такую секцию. что-то я не понимаю ее смысл.
Код: java
1.
synchronized (Thread.currentThread()){...}



Я это так понимаю:
никто из этого потока не сможет обратиться к этой секции пока этот поток не освободит ее.

как-то бредово.
...
Рейтинг: 0 / 0
synchronized (Thread.currentThread() ) есть ли смысл?
    #38610895
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В коде? Используемом? В Java сертификации есть вопрос с такой фигней. В реальной жизни смысла ноль.
...
Рейтинг: 0 / 0
synchronized (Thread.currentThread() ) есть ли смысл?
    #38610898
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

в оочень используемом....дебажу сижу его.
...
Рейтинг: 0 / 0
synchronized (Thread.currentThread() ) есть ли смысл?
    #38610915
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

можешь привести пример когда это как-то повлияет на исполнение кода?
...
Рейтинг: 0 / 0
synchronized (Thread.currentThread() ) есть ли смысл?
    #38610936
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90можешь привести пример когда это как-то повлияет на исполнение кода?
Та не особо. Может там внутри wait() ?
...
Рейтинг: 0 / 0
synchronized (Thread.currentThread() ) есть ли смысл?
    #38610948
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

у тебя дар ясновидения)


Не, я понимаю, что wait() и notify() можно только внутри synchronized блока писать, но если туда никто не сможет войти больше, то какой смысл....
...
Рейтинг: 0 / 0
synchronized (Thread.currentThread() ) есть ли смысл?
    #38610959
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90у тебя дар ясновидения)

У меня гугл:
http://www.coderanch.com/t/517363/threads/java/synchronized-Thread-currentThread

redwhite90Не, я понимаю, что wait() и notify() можно только внутри synchronized блока писать, но если туда никто не сможет войти больше, то какой смысл....
Ну, какой-то топорный механизм стопорить потоки. А notify как реализован?
...
Рейтинг: 0 / 0
synchronized (Thread.currentThread() ) есть ли смысл?
    #38610966
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

я там был, но не понял сути того, что там пишут.

про notify не понял
...
Рейтинг: 0 / 0
synchronized (Thread.currentThread() ) есть ли смысл?
    #38610974
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90про notify не понял
Это же у вас код. Если есть wait() должен быть и notify(). Так?
...
Рейтинг: 0 / 0
synchronized (Thread.currentThread() ) есть ли смысл?
    #38610982
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

в этом классе нет)
...
Рейтинг: 0 / 0
synchronized (Thread.currentThread() ) есть ли смысл?
    #38611076
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

наверное что-то не так с этим кодом?
...
Рейтинг: 0 / 0
synchronized (Thread.currentThread() ) есть ли смысл?
    #38611114
DEVcoach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
redwhite90 ,
Код однозначно кривой. На классах java.* синхронизироваться нельзя. Не потому, что это однозначно ведет к неправильной работе программы, а потому, что вы синхронизируетесь на объектах, которые находятся вне вашего полного контроля. А это может приводить к нежелательным сайд-эффектам, из-за которых вам потом придется ломать голову.
Например, берет Вася, и синхронизируется на стринге, прочитав где-то, что стринги в Java синглтоны. И деплоит свое приложение в аппсервер. Потом он радостно рассказывает об этом Пете, и тот запиливает синхронизацию на стрингах в совершенно другом приложении, и тоже деплоит его на этот же сервер. В итоге у вас возникает контеншн между разными потоками из разных приложений. Жопа? Жопа. Долго вы будете дебагать это? Очень долго, гарантирую. А потом в команду приходит Вова, который в одном месте код делает new String("blabla"). И Васин код перестает работать, потому что Вова сломал синглтон. Долго вы будете это дебагать? Долго, гарантирую.
Или берете вы, и синхронизируетесь на Thread. А потом кто-то из Oracle решает в потрохах java.lang так же синхронизироваться на Thread. И что? Опять непонятный контеншн.
Так что надо следовать простому правилу: синхронизироваться только на мониторах ваших объектах, которые полностью под вашим контролем. Тогда все будет хорошо.

Что же до вашего кода, то не факт, что он работает неправильно. Где-то в другом месте приложения запросто может быть что-то вроде:
Код: java
1.
2.
3.
4.
Thread otherThread = getOtherThread();
synchronized (otherThread) {
    ...
}


И этот otherThread вполне может оказаться вашим Thread.currentThread().

Резюме:
- Код кривой;
- Но необязательно некорректный.
...
Рейтинг: 0 / 0
synchronized (Thread.currentThread() ) есть ли смысл?
    #38611130
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DEVcoach,

можете написать пример кода со sleep , демонстрирующий различие кода с такой синхронизацией и без нее?
...
Рейтинг: 0 / 0
synchronized (Thread.currentThread() ) есть ли смысл?
    #38611263
For All
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DEVcoach,

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

P.S. Шареный истанс может появиться только, если оба этих приложения исользуют одну и ту же либу/jar-ку задеплоеную отдельно от этих приложений на этот сервер.
...
Рейтинг: 0 / 0
synchronized (Thread.currentThread() ) есть ли смысл?
    #38611269
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
For AllСо стрингами не соглашусь. Может конкретные стринги и синглтоны, но в разных приложениях, задеплоеных на один и тот же сервер, это разные истансы. Так происходит от того, что разные приложения поднимаются разными класс-лоадерами, как раз чтобы избежать вот таких (и других) коллизий.

Лолшто? В разных класс-лоадерах разные java.lang.String? Спешу вас разочаровать. Вы немного заблуждаетесь.

For AllP.S. Шареный истанс может появиться только, если оба этих приложения исользуют одну и ту же либу/jar-ку задеплоеную отдельно от этих приложений на этот сервер.
rt.jar не одна из этих либ, потому что... Почему?
...
Рейтинг: 0 / 0
synchronized (Thread.currentThread() ) есть ли смысл?
    #38611282
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
public class SyncOnCurrentThread {
	public static void main(String[] args) throws InterruptedException {
		Thread t = new Thread() {
	        public void run() {  // A
	            synchronized (Thread.currentThread()) {
	                System.out.println("A");
	            }
	        }
	    };
	    synchronized (t) { //B
	        t.start();
	        Thread.sleep(5000);
	    }
	}
}
...
Рейтинг: 0 / 0
synchronized (Thread.currentThread() ) есть ли смысл?
    #38611286
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а так без:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
public class SyncOnCurrentThread {
	public static void main(String[] args) throws InterruptedException {
		Thread t = new Thread() {
	        public void run() {  // A
	        //    synchronized (Thread.currentThread()) {
	                System.out.println("A");
	        //    }
	        }
	    };
	    synchronized (t) { //B
	        t.start();
	        Thread.sleep(5000);
	    }
	}
}
...
Рейтинг: 0 / 0
synchronized (Thread.currentThread() ) есть ли смысл?
    #38611289
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90,

Что это? Зачес это? Thread.sleep() же освобождает монитор.
...
Рейтинг: 0 / 0
synchronized (Thread.currentThread() ) есть ли смысл?
    #38611303
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

а попробуй запустить
...
Рейтинг: 0 / 0
synchronized (Thread.currentThread() ) есть ли смысл?
    #38611323
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz Thread.sleep() же освобождает монитор.


судя по всему эта предпосылка неверна
...
Рейтинг: 0 / 0
synchronized (Thread.currentThread() ) есть ли смысл?
    #38611324
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90,

Гоню. sleep() не освобождает лок, в отличие от wait(). Выходит join на коленке. Зачем?
...
Рейтинг: 0 / 0
synchronized (Thread.currentThread() ) есть ли смысл?
    #38611327
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

поймаю автора -обязательно спрошу)
...
Рейтинг: 0 / 0
synchronized (Thread.currentThread() ) есть ли смысл?
    #38611330
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90поймаю автора -обязательно спрошу)
Зачем? Ты лучше в другом классе вытащи ссылку на поток и засинхронизируйся на ней. А автору happy debugging
...
Рейтинг: 0 / 0
synchronized (Thread.currentThread() ) есть ли смысл?
    #38611337
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz в отличие от wait().

а кстати да....получается, что это проcnj Thread.sleep()
...
Рейтинг: 0 / 0
synchronized (Thread.currentThread() ) есть ли смысл?
    #38611351
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

BlazkowiczА автору happy debugging

врятли.это код 2012 года написания.
...
Рейтинг: 0 / 0
25 сообщений из 28, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / synchronized (Thread.currentThread() ) есть ли смысл?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]