powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Реализация потокового заполнения массива
3 сообщений из 3, страница 1 из 1
Реализация потокового заполнения массива
    #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
Реализация потокового заполнения массива
    #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
Реализация потокового заполнения массива
    #38906365
Sergeyyy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dmitry.,спасибо!)
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Реализация потокового заполнения массива
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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