powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / снова потоки
11 сообщений из 11, страница 1 из 1
снова потоки
    #38788448
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите, правильно ли я делаю, дело в том, что все потоки, созданные вначале, завершаются один после другого по порядку - как я понимаю, это не есть правильно. Это потому что все потоки используют один и тоже class Creator?

Код: 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.
Creator _instance = new Creator();
Process proc = new Process(_instance);	
for (int i = 0; i < 100; i++) {
	new Thread(proc).start();
}


//******************************


class Process implements Runnable {
	
	private Creator _instance;

	public Process(SocketCreator _instance) {
		this._instance=_instance;
	}

	@Override
	public void run() {
		_instance.create();
	}
}


//******************************


public class Creator {
	
	private int counter;
	
	public void create() {
		// do much of work here
	}
	
	public int getCreatedThreadsCounter...
	public void setCreatedThreadsCounter...

}
...
Рейтинг: 0 / 0
снова потоки
    #38788451
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потоки в приведенном коде запускаются по очереди. Поэтому и завершаются в том же порядке. Возможно, за редким исключением.
Что именно смущает? Примитивов синхронизации не замечено.
CyclicBarrier позволяет приостановить все потоки и потом "отпустить" их одновременно. В этом случае вам будет проще выявить ошибки в не синхронизированого счетчика.
...
Рейтинг: 0 / 0
снова потоки
    #38788462
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По моему ты путаешь причину со следствием. Причина - это алгоритм.
У тебя он неочевиден и непонятно что нужно сделать в конце.

Сейчас сходу ответить на твой вопрос невозможно потому-что он будет
неполным. Нельзя строить какие-то мнимые правила на базе огрызков
кода.

Синхронизировать завершения потоков не обязательно. Их результат
может быть зафиксирован иным путём отличным от механизмов join
(можно к примеру скинуть репортик в свой текстовый файлик). Вобщем
всё зависит от задачи. А есть даже такие парадигмы программирования
где считается правильным запускать "потоки камикадзе".
...
Рейтинг: 0 / 0
снова потоки
    #38788482
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я что имею ввиду - вначале создалась куча потоков, и все они обращаются к одному и тому же методу create() того же самого объекта - т.е. это не является узким местом?

как они могут выполнять этот метод одновременно, объект же один, получается что кто-то один его выполняет, а другие ждут??? тогда это объясняет что они завершаются один за другим по очереди... или все-таки могут???
...
Рейтинг: 0 / 0
снова потоки
    #38788496
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rema174я что имею ввиду - вначале создалась куча потоков
Нет. Потоки создаются по очереди. А не "вначале".

rema174, и все они обращаются к одному и тому же методу create() того же самого объекта - т.е. это не является узким местом?

Нет. У вас какое-то концептуальное непонимание потоков. Методы это поведение. Они не являются критическим ресурсом сами по себе.

rema174как они могут выполнять этот метод одновременно, объект же один, получается что кто-то один его выполняет, а другие ждут??? тогда это объясняет что они завершаются один за другим по очереди... или все-таки могут???
Метод это метод. Набор инструкций для исполнения. Не важно какому объекту он пренадлежит. Потоки могут исполнять инструкции параллельно. Проблемы возникают из-за критических ресурсов - областей памяти, которые потокам приходится использовать одновременно.
...
Рейтинг: 0 / 0
снова потоки
    #38788538
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczНет. Потоки создаются по очереди. А не "вначале".
да, по очереди, но практически в одно и тоже время, верно? а учитывая, что приоритет у них у одинаковый, то в каком порядке они завершатся неизвестно, верно? значит если они завершаются по очереди, то что-то все-таки определяет их очередность

rema174У вас какое-то концептуальное непонимание потоков. наверное, есть немного :-)

BlazkowiczПроблемы возникают из-за критических ресурсов - областей памяти, которые потокам приходится использовать одновременно.переменная counter - там не показано, но она инкрементится каждый раз сразу в конце create(), получается может так совпасть, что в один и тот же момент времени разные потоки будут изменять ее, но я не заметил каких-то проблем, возможно из-за того, что она изменяется не часто...
...
Рейтинг: 0 / 0
снова потоки
    #38788620
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rema174значит если они завершаются по очереди, то что-то все-таки определяет их очередностьСлучайность определяет.
Этот как с SQL select. Нет order by - порядок будет произвольным. Он может и, довольно часто, будет совпадать с порядком вставки записей, но нет никаких гарантий такого поведения.
...
Рейтинг: 0 / 0
снова потоки
    #38788640
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rema174да, по очереди, но практически в одно и тоже время, верно?

Нет. У вас тело потока соизмеримо со временем создания и запуска потока.


rema174а учитывая, что приоритет у них у одинаковый, то в каком порядке они завершатся неизвестно, верно? значит если они завершаются по очереди, то что-то все-таки определяет их очередность
В общем случае да. В частных случаях, как например в вашем, видно же что потоки выполняются и завершаются слабо конкурируя.


rema174переменная counter - там не показано, но она инкрементится каждый раз сразу в конце create(), получается может так совпасть, что в один и тот же момент времени разные потоки будут изменять ее, но я не заметил каких-то проблем, возможно из-за того, что она изменяется не часто...
Я никогда не видел серых лошадей. Из чего я могу сделать вывод что их не существует.
...
Рейтинг: 0 / 0
снова потоки
    #38788658
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczЯ никогда не видел серых лошадей. Из чего я могу сделать вывод что их не существует.
это я к тому, что похоже это тот случай, когда нужно применять модификатор volatile к полю класса
...
Рейтинг: 0 / 0
снова потоки
    #38788820
Santex78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rema174, Я бы порешал ваш вопрос экспериментально - нет лучшего способа понять как что-то работает, как только не провести эксперимент. Например внутри метода, насчет которого у вас сомнения встройте рандомную задержку и посмотрите, будут ли они завершаться одновременно или нет.
...
Рейтинг: 0 / 0
снова потоки
    #38788878
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rema174это я к тому, что похоже это тот случай, когда нужно применять модификатор volatile к полю класса
Нет. Это тот случай когда нужно начинать читать статьи про мониторы, семафоры, взаимоблокировки, volatile и CAS. Сейчас даже на русском этого материала как грязи. Через volatile нельзя обезопасить счетчик, так как инкремент это не атомарная операция.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / снова потоки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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