Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / потоки / 4 сообщений из 4, страница 1 из 1
23.08.2013, 15:11:08
    #38375975
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
потоки
....теряюсь в потоках, почему не создаются потоки и на выходе только главный поток?
по идее, в консоли должно показать 15 потоков

Код: 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.
public class ThreadsSample {
    static int count = 15;
    static volatile int countCreatedThreads;

    public static void main(String[] args) {
        System.out.println(new GenerateThread());
    }

    public static class GenerateThread extends Thread {

    	public GenerateThread() {    		
    		super(String.valueOf(++countCreatedThreads));
    		start();
    	}
    	
    	public void run() {
    		while(count >= countCreatedThreads) {
    			GenerateThread t = new GenerateThread();
    			t.toString();
    		}
    	}
    	
		@Override
		public String toString() {
			String name = Thread.currentThread().getName();
			if (name.equals("main")) return "main";
			return name + " created";
		}
    }
}
...
Рейтинг: 0 / 0
23.08.2013, 15:55:02
    #38376047
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
потоки
t.toString(); по-вашему должно что-то напечатать в консоль?
...
Рейтинг: 0 / 0
23.08.2013, 16:45:19
    #38376114
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
потоки
блин...
но если не вводить маленькие засыпания в метод run(), то получаю потоки с одинаковыми именами, т.е. получается увеличение ++countCreatedThreads не поспевает за созданием потоков?

main
1 created
1 created
1 created
2 created
5 created
5 created
1 created
5 created
2 created
5 created
2 created
6 created
7 created
1 created
5 created
...
Рейтинг: 0 / 0
23.08.2013, 16:54:36
    #38376127
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
потоки
rema174но если не вводить маленькие засыпания в метод run(), то получаю потоки с одинаковыми именами, т.е. получается увеличение ++countCreatedThreads не поспевает за созданием потоков?

Получается инкремент поля не является потокобезопасной операцией. Даже если туда volatile впендюрить.
Смотри sychronized, AtomicInteger и вообще книжки и статьи по многопоточности.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / потоки / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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