использование синхронизированного метода в приветливой корзине - PullRequest
1 голос
/ 27 марта 2012

взглянем на учебник по приветливым bean-компонентам NetBeans.Зачем нам здесь синхронизированные методы?

public synchronized int getNumberOfItems() {

        numberOfItems = 0;

        for (ShoppingCartItem scItem : items) {

            numberOfItems += scItem.getQuantity();
        }

        return numberOfItems;
    }


    public synchronized double getSubtotal() {

        double amount = 0;

        for (ShoppingCartItem scItem : items) {

            Product product = (Product) scItem.getProduct();
            amount += (scItem.getQuantity() * product.getPrice().doubleValue());
        }

        return amount;
    }

Ответы [ 2 ]

2 голосов
/ 27 марта 2012

Похоже, что каждый метод, связанный с управлением ShoppingCartItems, синхронизирован.Конечно, для предотвращения одновременного доступа в списке items (List<ShoppingCartItem> items;).

Без синхронизации вы можете иметь 1+ Thread, обращающийся к методу чтения, например getSubtotal (), в то время какitems Список обновляется через общедоступный synchronized void addItem(Product product) другим потоком.

Источник можно найти здесь

0 голосов
/ 27 марта 2012

возможно, потому что вы можете делать покупки, используя два разных окна, и корзина должна быть обновлена ​​должным образом, поэтому все связанные методы помечены как synchronized

...