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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.03.2022, 14:10   #1
REztor
Форумчанин
 
Регистрация: 28.02.2009
Сообщений: 302
По умолчанию Последовательная работа потоков

Есть программа с последовательно работающими потоками, выводящая результат в виде:
1 - 2
1 - 2
...
1 - 2
Код:
public class ThreadOne extends Thread
{
    private final Object monitor;
    public ThreadOne(Object mon) {
        monitor = mon;
    }
 
    @Override
    public void run () {
        try
        {
            for (int i = 0; i < TicTak.num; i++) {
                synchronized (monitor) {
                    System.out.print(1 + " - ");
                    monitor.notify();
                    if (i < TicTak.num - 1) {
                        monitor.wait();
                    }
                }
            }
        }
        catch (InterruptedException e) { }
    }
}
Код:
public class ThreadTwo implements Runnable
{
    private final Thread self;
    private final Object monitor;
 
    public Thread getSelf()
    {
        return self;
    }
 
    public ThreadTwo(Object mon)
    {
        monitor = mon;
        self = new Thread (this);
    }
 
    @Override
    public void run()
    {
        try {
//            Thread.sleep(1);
            for (int i = 0; i < TicTak.num; i++) {
                synchronized (monitor) {
                    System.out.println(2);
                    monitor.notify();
                    if (i < TicTak.num - 1) {
                        monitor.wait();
                    }
                }
            }
        }
        catch (InterruptedException e) { }
    }
}
Код:
public class TicTak {
    static int num=20;
 
    public static void main(String[] args) {
        Object monitor = new Object();
        ThreadOne thr1 = new ThreadOne (monitor);
        ThreadTwo thr2 = new ThreadTwo (monitor);
 
        thr1.start();
        thr2.getSelf().start();
 
        try {
            thr1.join();
            thr2.getSelf().join();
        }
        catch (InterruptedException e) { e.printStackTrace();}
    }
}
Как добавить третий поток, чтобы результат выводился последовательно в следующем виде?
1 - 2 - 3
1 - 2 - 3
...
1 - 2 - 3
REztor вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[C++] Реализовать последовательно-параллельный запуск потоков в ОС Linux или Mac OS X с использованием средств POSIX для запуска и синхронизации потоков Кристина1998 Фриланс 2 25.03.2019 20:45
Работа с файлами с использованием потоков Atasik Общие вопросы C/C++ 5 25.01.2011 00:47
Работа с HANDLE из разных потоков sluge Win Api 6 24.01.2011 10:07
Работа с файлом из нескольких потоков boris-blade Общие вопросы .NET 2 02.04.2010 17:21