Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
 Аватар для WizarD_89
1 / 1 / 0
Регистрация: 24.05.2011
Сообщений: 63

Семафор и одновременный запуск потока

30.10.2013, 06:46. Показов 3313. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! У меня в лабораторной задаче есть пункт в котором нужно при помощи Семафора добиться одновременного запуска двух потоков. есть главный поток, который запускает еще два потока, какой-то из созданных потоков запускается первый, и ждет пока запуститься второй, после того как второй стартанул они вместе начинают работу.

НО ЭТО ЖЕ НЕЛЬЗЯ СДЕЛАТЬ СЕМАФОРОМ?

Семафор может только ограничить максимальное количество потоков которые могут выполнять определённый код программы. Я же правильно сказал? получается в задании ошибка? просто они задание уже сколько лет у преподавателя, что очень странно, что ни кто не заметил ошибки и как то выполнял это условие.

Вот например одновременный запуск двух потоков легко выполнить с помощью класса CountDownLatch.

Добавлено через 1 час 2 минуты
Люди помогите срочно нужно!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.10.2013, 06:46
Ответы с готовыми решениями:

Одновременный, множественный запуск потока
изначально была функция, я её поместил в поток... вызываю поток так и назначаю ядро так: Thread = new Perebor (false); ...

Одновременный запуск двух проектов
Добрый день, У меня есть Solution, в которм находится 2 проекта. Первый проект это сонсольное приложение, которое запускает Selenium...

Одновременный запуск двух методов
Есть два метода в определенном классе, я вызываю эти методы в классе формы на обработчике кнопки, как мне запустить параллельно эти два...

7
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
30.10.2013, 09:20
Разумеется можно.
Создаете семафор, с лимитом, например = 1. Взводите его (acquire)
Запускаете первый поток - который будет ждать освобождения семафора.
Запускаете второй поток, первой командой которого будет release семафора.

После того как запустится второй поток и выполнит release - сразу же начнет работу первый поток.
0
 Аватар для WizarD_89
1 / 1 / 0
Регистрация: 24.05.2011
Сообщений: 63
30.10.2013, 09:25  [ТС]
turbanoff А если второй поток запустится раньше первого?что тогда будет?
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
30.10.2013, 09:26
надо подумать
0
 Аватар для WizarD_89
1 / 1 / 0
Регистрация: 24.05.2011
Сообщений: 63
30.10.2013, 09:28  [ТС]
Спасибо) только мне желательно побыстрей)
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
30.10.2013, 09:37
В задании есть ограничение на количество семафоров? Можно сделать с двумя
0
 Аватар для WizarD_89
1 / 1 / 0
Регистрация: 24.05.2011
Сообщений: 63
30.10.2013, 09:47  [ТС]
вроде нет, а как будет с двумя?

Добавлено через 8 минут
то есть примерно так?

поток 1{
симафор_1 = 1;
run(){
симафор_1.acquire();
симафор_2.relase();

}
}

поток 2{
симафор_2 = 1;
run(){
симафор_2.acquire();
симафор_1.relase();
}
}
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
30.10.2013, 10:00
Вроде получилось с одним:
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
public class Main {
    public static void main(String[] args) throws InterruptedException {
        final Semaphore semaphore = new Semaphore(1);
        MyRunnable t1 = new MyRunnable(semaphore);
        MyRunnable t2 = new MyRunnable(semaphore);
        new Thread(t1).start();
        new Thread(t2).start();
    }
}
 
class MyRunnable implements Runnable {
    private final Semaphore semaphore;
 
    public MyRunnable(Semaphore semaphore) {
        this.semaphore = semaphore;
    }
 
    @Override
    public void run() {
        if (semaphore.tryAcquire()) {
            try {
                semaphore.acquire();
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        } else {
            semaphore.release();
        }
 
        System.out.println(System.currentTimeMillis());
    }
}
Можно убедиться, что поток является вторым, используя tryAcquire. И в зависимости от того, что он вернул, делать разные вещи
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.10.2013, 10:00
Помогаю со студенческими работами здесь

Одновременный запуск нескольких приложений
@echo off chcp 1251 1>nul start "patcher_cf" "D:\ИГРЫ\Cross Fire\patcher_cf exitВот одно из них patcher_cf.exe запускает онлайн...

Одновременный запуск двух программ.
Здравствуйте,имеется программа Du Meter и подключение к интернету, которое включается из панели быстрого запуска. Вопрос: возможно ли с...

Одновременный запуск только 5 копий программы
Помню как все одно время набил оскомину вопрос, как же запретить повторный запуск программы. А мне надо разрешить 5 повторных запусков, а...

Одновременный запуск двух разных видеокарт
Народ, вот есть следующий конфиг: Системная плата Asus strix z270-f ддр4 16 гб Team delta Проц i7 7700k Видеокарта №1 radeon...

Одновременный запуск нескольких сессий на сервере
Всем привет. Чисто эстетическая задачка. Есть html форма в которой выбираются источники для парсинга, на выходе кнопка submit,...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
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
/ * Дана цепь постоянного тока с 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/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru