Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/16: Рейтинг темы: голосов - 16, средняя оценка - 4.75
2 / 2 / 0
Регистрация: 23.10.2010
Сообщений: 111

Синхронизация потоков.

29.11.2010, 17:15. Показов 3275. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
имеется магазин и две группы постовщиков, товары будут поставлять две группы одновременно. Если магазин заполняется товаром, то происходит приостановка поставок. После продажи какого-либо количество товаров, снова возабновляются поставки. Что то так вот.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.11.2010, 17:15
Ответы с готовыми решениями:

Синхронизация потоков
Пытаюсь синхронизировать потоки, но не очень выходит. Какого вывода я ожидаю: Поток №1 Поток №2 Поток №3 Поток №1 Поток №2 ...

Синхронизация потоков
Требуется: Выполнить приложение командной строки с двумя параметрами , один из которых – количество потоков, другой параметр – количество...

Синхронизация потоков
Начал изучать Java 8 по книге. Наткнулся на пример искусственной реализации приостановки и возобновления потоков. Main.java public...

7
10 / 10 / 0
Регистрация: 25.11.2010
Сообщений: 40
29.11.2010, 20:50
да, я с вами согласен...
0
2 / 2 / 0
Регистрация: 23.10.2010
Сообщений: 111
29.11.2010, 20:51  [ТС]
скучно что ли стало совсем))
0
10 / 10 / 0
Регистрация: 25.11.2010
Сообщений: 40
29.11.2010, 21:43
та есть малёхо ))

Ну так есть наработки? Вышеописаный процес легко(ну не тривиально) реализуется с помощью wait / notify методов жава потоков... надо просто что начать делать .. )
0
2 / 2 / 0
Регистрация: 23.10.2010
Сообщений: 111
29.11.2010, 22:01  [ТС]
да тут потихоньку изучаю wait notify, но пока не сообразил как их использовать в этом примере
0
10 / 10 / 0
Регистрация: 25.11.2010
Сообщений: 40
29.11.2010, 23:44
Product.java
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package org.goodsmarket;
 
public class Product {
    private double price = 0.0d;
    private String name = null;
    
    public Product(String name, double price) {
        this.name = name;
        this.price = price;
    }
    
    public double getPrice() {
        return price;
    }
    public void setPrice(double price) {
        this.price = price;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}
Supplier.java
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package org.goodsmarket;
 
public class Supplier implements Runnable{
    
    String name = null;
    Store store = null;
    
    public Supplier(String name, Store store) {
        this.name = name;
        this.store = store;
    }
    
    @Override
    public void run() {
        supplyProducts(store);
    }
    
    private void supplyProducts(Store store) {
        long c = 0;
        while(true) {
            //sleep
            try { Thread.sleep(500); }
            catch (InterruptedException e) { e.printStackTrace(); }
            
            Product newproduct = new Product(name+" | "+c++, 5.0);
            store.takeProduct(newproduct);
        }
    }
    
}
Customer.java
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package org.goodsmarket;
 
public class Customer implements Runnable {
    
    private Store store = null;
    private String name = null;
    
    public Customer(String name, Store store) {
        this.name = name;
        this.store = store;
    }
    
    private void buyProduct(Store store) {
        while(true) {
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        store.saleProduct();
        }
    }
 
    @Override
    public void run() {
        buyProduct(store);
    }
}
Store.java
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package org.goodsmarket;
 
import java.util.ArrayList;
import java.util.List;
 
public class Store {
    
    // available products on Store
    List<Product> products = new ArrayList<Product>();
    
    // total revenue
    double revenue = 0.0;
 
    public synchronized void takeProduct(Product product) {
        if(products.size() > 20) {
            try {
                this.wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        
        products.add(product);
        
        System.out.println("take product ("+products.size()+")");
    }
 
    public synchronized void saleProduct() {
        
        if(products.size()>0) {
            revenue += products.get(0).getPrice();
            products.remove(0);
        }
        System.out.println("STORE: sale product       products in store: "+products.size()+"    total revenue: "+revenue+"");
        
        if(products.size() < 5) {
            notifyAll();
        }
        
    }
}
MarketAction.java
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package org.goodsmarket;
 
public class MarketAction {
    
    public static void main(String[] args) {
        
        // shared object
        Store store = new Store();
        
        // threads: 2 suppliers and 1 customer
        Thread sup1 = new Thread(new Supplier("comp1", store));
        Thread sup2 = new Thread(new Supplier("comp2", store));
        Thread cust1 = new Thread(new Customer("John", store));
        
        // start market actions: supplying and sailing
        sup1.start();
        sup2.start();
        cust1.start();
    }
}
Эх, ностальгия, самому приятно было вспомнить
1
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
30.11.2010, 11:05
Цитата Сообщение от isakz Посмотреть сообщение
да тут потихоньку изучаю wait notify, но пока не сообразил как их использовать в этом примере
Вот это решает задачу: java.util.concurrent.ArrayBlockingQueue
1
2 / 2 / 0
Регистрация: 23.10.2010
Сообщений: 111
30.11.2010, 12:51  [ТС]
aga, spasibo. posmotru.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.11.2010, 12:51
Помогаю со студенческими работами здесь

Синхронизация потоков
Добрый день. Нужно решить уравнение методом хорд и методом касательных. Решаться должно одновременно в двух разных потоках. Поток, который...

Синхронизация потоков
Столкнулся с непонятной проблемой.Хочу решить задачу типа два потока заполняют буфер по очереди. Сначала поток А выводит символ...

Синхронизация потоков в Java
Если есть блок synchronyzed то в него нужно передать Object да? То есть если главный поток зашел в блок synchronyzed то id объекта Object...

Синхронизация потоков. Java
Всем доброго времени суток, нужна помощь в реализации синхронизации потоков на Java, не очень понимаю данную тему, вот взял задание и не...

Синхронизация потоков. Простенький пример
Здравствуйте уважаемые форумчане! Прошу помощи экспертов! Дано 3 класса... public class Data { private int state = 1; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru