powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Работает один поток из двух
6 сообщений из 6, страница 1 из 1
Работает один поток из двух
    #38400877
Витяй1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.
Есть очередь, из которой последовательно два потока один за другим должны брать элементы, чтобы убедиться, что работают оба потока, добавил
Код: java
1.
Thread q = Thread.currentThread ();

с последующим выведением на консоль результата:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
public class App implements Runnable {

    public static Queue<Integer> que = new LinkedList<Integer>();

    public void run() {
        int t;
        synchronized (que) {
            Thread q = Thread.currentThread ();
            while (!que.isEmpty()) {
                t = que.remove();
                System.out.println(t+" "+q);
            }
        }
    }
   public static void main(String[] args) {
 ExecutorService exec = Executors.newFixedThreadPool(2);
        for (int i = 0; i < 2; i++) {
            exec.execute(new App());
        }
}



Но на консоль выводится только:
0 Thread[pool-1-thread-1,5,main]
1 Thread[pool-1-thread-1,5,main]
2 Thread[pool-1-thread-1,5,main]
3 Thread[pool-1-thread-1,5,main]

pool-1-thread-1 - т.е. получается, что работает один поток, но почему, ведь я запускаю два потока
...
Рейтинг: 0 / 0
Работает один поток из двух
    #38400880
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
synchronized (que)
...
Рейтинг: 0 / 0
Работает один поток из двух
    #38400886
Витяй1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimir
Код: java
1.
synchronized (que)


точно))
А как тогда можно сделать, чтобы они по очереди брали данные из Queue que? Когда не включаю инструкцию synchronized, то программа работает через раз: то нормально работает, то пишет java.util.NoSuchElementException
...
Рейтинг: 0 / 0
Работает один поток из двух
    #38400888
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смотрите коллекции из java.util.concurrent, какой нибудь ConcurrentLinkedQueue.
...
Рейтинг: 0 / 0
Работает один поток из двух
    #38400891
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вам нужно использовать потокобезопасные коллекции из пакета java.util.concurrent. Либо же делайте так:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
while (true) {
    synchronized (que) {
        Integer t = que.poll();
    }

    if (t != null)
        System.out.println(t + " " + Thread.currentThread());
    else
        break;
}
...
Рейтинг: 0 / 0
Работает один поток из двух
    #38400913
Витяй1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cdtyjv, just_vladimir , спасибо, разобрался!)
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Работает один поток из двух
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]