Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.05.2013, 04:18   #1
pufystyj
Форумчанин
 
Аватар для pufystyj
 
Регистрация: 10.11.2010
Сообщений: 569
По умолчанию Ключевое слово synchronized и многопоточность

Всем добрый день!
У меня такой вопрос:
Как сделать так чтобы одновременно мог вызываться только один метод из двух, которые состоят в одном обьекте? То есть, как я понимаю слово synchronized влияет именно на обьявленный с ним метод, а не на все методы обьявленные с synchronized в этом обьекте.
Наведу пример:
Есть метод изменяющий обьект, и есть метод который считывает и возвращает этот обьект. Если одновременно оба вызвать - битая информация возвращаеться.
Канешно есть вариант создать метод, который являеться synchronized и которому передавать одним из аргументов какую именно функцию ты хочешь вызвать и этот же метот будет запрещать вызывать другие одновременно. Но все же может есть какой-то более изящный способ?
Всем зарание спасибо.
Это ещё не конец и даже не начало конца, это возможно только конец начала.

Последний раз редактировалось pufystyj; 16.05.2013 в 04:41.
pufystyj вне форума Ответить с цитированием
Старый 16.05.2013, 12:26   #2
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Ты не правильно понял. Он влияет на весь объект. Это то же самое что и:

Код:
public void methodA()
{
    synchronized (this)
    {
        ....
    }
}

public void methodB()
{
    synchronized (this)
    {
        ....
    }
}
Возьми протести: помести в методы слип и посмотри что будет.

Последний раз редактировалось Carbon; 16.05.2013 в 12:34.
Carbon вне форума Ответить с цитированием
Старый 16.05.2013, 23:24   #3
pufystyj
Форумчанин
 
Аватар для pufystyj
 
Регистрация: 10.11.2010
Сообщений: 569
По умолчанию

Цитата:
Сообщение от Carbon Посмотреть сообщение
Ты не правильно понял. Он влияет на весь объект. Это то же самое что и:

Код:
public void methodA()
{
    synchronized (this)
    {
        ....
    }
}

public void methodB()
{
    synchronized (this)
    {
        ....
    }
}
Возьми протести: помести в методы слип и посмотри что будет.
Да, я что-то не внимательно читал. Спасибо вам
Это ещё не конец и даже не начало конца, это возможно только конец начала.
pufystyj вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ключевое слово в с++ Юлия Набиева Помощь студентам 3 12.03.2013 14:36
Ключевое слово out в вызове функции. Указатели Cerebrum C# (си шарп) 3 14.01.2012 00:25
зачем нужно ипользовать ключевое слово super? Syltan Общие вопросы по Java, Java SE, Kotlin 16 20.05.2010 19:06
MSVC++: ключевое слово operator Пепел Феникса Общие вопросы C/C++ 2 20.10.2009 21:32