Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Реализация потокового заполнения массива / 3 сообщений из 3, страница 1 из 1
15.03.2015, 22:02
    #38905393
Sergeyyy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация потокового заполнения массива
Здравствуйте всем!

Возник небольшой вопросик. Имеется небольшой код:

Код: 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.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
import java.util.Scanner;

public class NeuronM {
	private static final int wed = 4;// строк
	private static final int hed = 4;// столбцов
	private static int[][] MainB = new int[wed][hed];
	static int iw = 0;
	static int ih = 0;

	public static void main(String[] args) {
		for (int i = 0; i < wed; i++) {
			for (int j = 0; j < hed; j++) {
				MainB[i][j] = 0;
			}
		}
		for (int c = 0; c < wed; c++) {
			for (int b = 0; b < hed; b++) {
				System.out.print(MainB[c][b] + " ");
			}
			System.out.println(" ");
		}
		Scanner sc = new Scanner(System.in);
		while (sc.hasNextInt()) {
			iw = sc.nextInt();
			ih = sc.nextInt();
			// generateactiv(iw, ih);
			Runnable r = new Runnable() {
				public void run() {
					generateactiv(iw, ih);
				}
			};
			r.run();
		}
	}

	private static void generateactiv(int iw, int ih) {
		int w = iw;
		int h = ih;
		MainB[w][h] = 1;
                System.out.println("------generate------");
		System.out.println("--------------");
		for (int c = 0; c < wed; c++) {
			for (int b = 0; b < hed; b++) {
				System.out.print(MainB[c][b] + " ");
			}
			System.out.println(" ");
		}
		System.out.println("--------------");
		underactiv(w, h);
	}

	private static void underactiv(int w, int h) {
		int ww = w;
		int hh = h;
		try {
			Thread.sleep(5000);
			MainB[ww][hh] = 0;

			System.out.println("--------------");
			for (int c = 0; c < wed; c++) {
				for (int b = 0; b < hed; b++) {
					System.out.print(MainB[c][b] + " ");
				}
				System.out.println(" ");
			}
			System.out.println("--------------");
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
}




При выполнении кода вызывается метод generateactiv, но вызывается он, скажем так, последовательно. То есть при вводе некоторых чисел мы вызовем метод, но работать он будет только при выполнении каких-либо действий в методе. Не подскажите, как правильно организовать потоковое выполнение сего метода? Попробовал в коде поиграться с Runnable, но это не работает(

Небольшой пример:
Мы вызвали метод generate вводом чисел, и увидели строку - ------generate------, но если мы введем числа, то ничего не увидим, потому что метод как бы выполняется, возможно, спасет перенос методов в некий отдельный класс с потоком.
...
Рейтинг: 0 / 0
15.03.2015, 22:40
    #38905409
Dmitry.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация потокового заполнения массива
Runnable не запускает отдельный поток
Для этого надо добавить Thread

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
		Scanner sc = new Scanner(System.in);
		while (sc.hasNextInt()) {
			iw = sc.nextInt();
			ih = sc.nextInt();
			// generateactiv(iw, ih);
			Runnable r = new Runnable() {
				public void run() {
					generateactiv(iw, ih);
				}
			};
			Thread t = new Thread(r);	//Создание потока
			t.start();			//Запуск потока
		}



но важно помнить, что кол-во потоков ограничено
лучше воспользоваться Executors.newFixedThreadPool( limit );

примерно такой код
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
		Scanner sc = new Scanner(System.in);
		ExecutorService executor = Executors.newFixedThreadPool(10); //максимум 10 потоков
		while (sc.hasNextInt()) {
			iw = sc.nextInt();
			ih = sc.nextInt();
			// generateactiv(iw, ih);
			Runnable r = new Runnable() {
				public void run() {
					generateactiv(iw, ih);
				}
			};
			executor.execute(worker); //запуск потока
		}
		executor.shutdown();
		while (!executor.isTerminated()) {}
...
Рейтинг: 0 / 0
16.03.2015, 19:46
    #38906365
Sergeyyy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация потокового заполнения массива
Dmitry.,спасибо!)
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Реализация потокового заполнения массива / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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