2014-02-15 5 views
0

Это мой класс в банке, который имеет депозит и отменяет методы, которые синхронизированы.Синхронизированные методы для разных объектов, разные потоки

public class BankAccount { 

private float blance; 

public synchronized void deposit(float amount) { 
    blance += amount; 
} 

public synchronized void withdraw(float amount) { 
    blance -= amount; 
    } 
} 

Что это верно:

1: В нескольких объектов этого класса, deposite() метод может работать с withdraw() методом в то же время.

2: В одном экземпляре (объекте) этого класса метод deposite() может запускать с самим собой мои два потока в одно и то же время (и считать это для withraw() самим методом).

Есть synchronized для предотвращения запуска методов в одно и то же время в нескольких объектах или в нескольких потоках?

+2

Это домашнее задание, пожалуйста, изучите еще – Coffee

+0

@Adel Нет, это не домашнее задание для меня, я ученик java. – Sunrise

+0

@ user3314119 Кажется маловероятным, учитывая, что вы сделали свой аккаунт сегодня ... Предположительно просто задать этот вопрос. Узнайте больше о синхронизации, это не внешняя тема. Вы найдете много информации об этом. –

ответ

2

Объявление нестатического метода как synchronized означает, что код будет синхронизирован по самому экземпляру объекта. В ДЕЙСТВИТЕЛЬНО, написание:

public synchronized void doStuff() 
{ 
    whatever(); 
} 

эквивалентно:

public void doStuff() 
{ 
    synchronized(this) { 
     whatever(); 
    } 
} 

Google для "Java Параллелизм на практике". И купи книгу.

+0

Спасибо, что ответили, а как насчет 'синхронизированных статических методов'? – Sunrise

+0

Затем он будет синхронизироваться с самим объектом класса: 'synchronized (MyClass.class) {whatever(); } '. Это работает, поскольку все объекты класса являются одноточечными. – fge

Смежные вопросы