840 / 478 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
1

Java общая переменная для нескольких потоков

17.06.2015, 10:36. Показов 3837. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем здравствуйте, вообщем у меня есть массив. Я его хочу расшарить между потоками.
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
import java.lang.*;
import java.util.*;
import java.util.concurrent.*;
 
class TestThread implements Runnable {
    private final static int SIZE = 10;
    private List<String> list;
 
    public TestThread(List<String> lst) {
        list = lst;
    }
    public void run() {
        synchronized(list) {
            for(int i=0; i<SIZE; i++) {
                list.add(String.valueOf(i));
                }
            }
            for(int i=0; i<SIZE; i++)
                System.out.println(list.get(i));
        }
        public static void main(String[] arg) {
            List<String> list = Collections.synchronizedList(new ArrayList<String>());
            ExecutorService service = Executors.newFixedThreadPool(3);
            service.submit(new TestThread(list));
            service.submit(new TestThread(list));
            service.submit(new TestThread(list));
        }
}
Вообщем, потоки запускаются, все работает, кроме одного но. У меня выводит 30 цифр. А должно 60. Где ошибся?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.06.2015, 10:36
Ответы с готовыми решениями:

Запуск нескольких потоков Java
Всем доброго времени суток! Наверное все знакомы с задачей Producer - Consumer. Если нет то вот...

Общая переменная для двух потоков
Есть программа, в которой один поток генерирует переменную, а два других обрабатывают её. Как...

Общая переменная для фреймов
Стандартная ситуация - надо, чтобы в parente (который frameset) была некая переменная, доступная (и...

Общая переменная для двух форм?
Мне требуется обработчиком события находящимся на Форме2 (кнопка) записать значение в переменную...

5
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
17.06.2015, 10:45 2
Цитата Сообщение от Wolkodav Посмотреть сообщение
private final static int SIZE = 10;
может тут? SIZE = 10
0
840 / 478 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
17.06.2015, 10:50  [ТС] 3
Паблито, а так понял, т.е. если я в main в конце, дождусь окончания работы, и выведу массив, то у меня будет как раз 30 штук?
0
Pablito
17.06.2015, 11:04
  #4

Не по теме:

а, я понял о чем вопрос :) надо что бы три потока по-очереди добавляли по 10 элементов в список
к сожалению я не настолько знаю многопоточность, поэтому подождем отцов

0
840 / 478 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
17.06.2015, 11:24  [ТС] 5
Паблито, ну да, мне только не важна очерёдность.
0
Автоматизируй это!
Эксперт Python
7064 / 4568 / 1210
Регистрация: 30.03.2015
Сообщений: 13,160
Записей в блоге: 29
17.06.2015, 16:09 6
пока отцы не пришли, кину свои 3 драхмы:
у тебя цикл заставляет выводить именно первые 10 строк в листе, потому и 30 цифр:
Цитата Сообщение от Wolkodav Посмотреть сообщение
for(int i=0; i<SIZE; i++)
* * * * * * * * System.out.println(list.get(i));
* * * * }
а вот если сделать полный вывод листа то и будут желанные 60:
Java
1
2
3
for(int i=0; i<list.size(); i++) {
            System.out.println(list.get(i));
        }
1
17.06.2015, 16:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.06.2015, 16:09
Помогаю со студенческими работами здесь

Общая переменная для двух экземпляров класса
Здравствуйте. есть класс. создаю несколько экземпляров класса. как в описании класса создать для...

Общая переменная для всех объектов класса
Как реализовать подобие static переменной в классе, не используя глобальных, если проект разделён...

Общая переменная для всех производных классов
В основном абстрактном классе Class0, я создаю переменную: protected int variable = 0; В...

Общая переменная контекста для Class Based View
Привет ребята! Есть несколько Class Based View: PostListView, PostDetailView, ... При отрисовке...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru