Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/18: Рейтинг темы: голосов - 18, средняя оценка - 4.50
69 / 69 / 39
Регистрация: 22.05.2014
Сообщений: 311

Многопоточность, с чего начать?

21.09.2014, 16:24. Показов 3867. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Суть такова, что с многопоточностью вообще до этого не сталкивался(было процедурное програмирование, ООП программирование но многопоточность не видел в глаза) Нет, я конечно могу рассказать 2 способа создания потока в джаве через наследование от Потока и интерфейс runnable, но на этом в моих знаниях можна ставить точку.
Итак, с чего начать? Не нужен госу уровень, но нужно хотя бы умение сделать простую лабу/распаралелить какое нибудь простое вычисление/разбить какое-то действие на несколько потоков. Нужно ли сначала разбираться с java memory model?
Да, если у кого есть простейшие задачи/лабы по многопоточности - скиньте пожалуйста.

Если у кого есть пример кода по простой задаче на многопоточность по типу такого ---

есть список файлов, нужно вернуть список всех слов из пяти букв из всех файлов, но для каждого файла искать в отдельном потоке. (ну короче на разделение работы на несколько потоков)

скиньте пожалуйста.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.09.2014, 16:24
Ответы с готовыми решениями:

С чего начать?
Приветствую. Я полный 0 в JAVA ни разу не программировал на нем. Сам программист PHP+JS. Мне нужно создават мобильные приложения...

С чего начать
Возможно (даже точно) я кинул вопрос не в ту тему, но все же. Буквально на днях изучил структуру написания HTML, узнал что к чему и как....

подскажите с чего начать
8. Имеется шахматная доска. Некоторые поля не ней заняты белыми фигурами и пешками. Каждая занятое поле определяется числом -1. Необходимо...

3
Так говорил Заратустра...
 Аватар для alex120
62 / 47 / 6
Регистрация: 19.01.2012
Сообщений: 162
Записей в блоге: 6
21.09.2014, 22:36
EdisonMiranda, на мой взгляд, вполне доступно написано: http://habrahabr.ru/post/164487/
1
3 / 3 / 0
Регистрация: 13.06.2012
Сообщений: 114
21.09.2014, 23:03
Если у Вас стоит задача научиться и понять как правильно работают потоки, то начните с любого из известных учебников по джаве, там обычно на таком уровне как для вашей задачи написано. А если что-то посерьезнее, то уже Java Concurrency in Practice и так далее. Начиная с Java 7 ввели много фич в язык сам , которые инкапсулируют всю работу с потоками. Различные pool-ы и так далее.
Ваша задача не требует таких вещей как синхронизация, так что решается легко. Примерно так, создаете класс реализующий Runnable,метод или конструктор которого на вход принимает файл. И в методе run уже обрабатываете что Вам нужно в файле. Потом создаете потоки, можно и в цикле и запускаете их. Единственное притормозить главный поток желательно пока другие не завершатся
1
69 / 69 / 39
Регистрация: 22.05.2014
Сообщений: 311
27.09.2014, 20:58  [ТС]
Не хочу создавать новую тему поскольку вопрос логически будет продолжать эту.

Пускай есть простейшая задача:
Есть список массивов, найти во всех них числа которые делятся на 10. При поиске таких чисел в каждом массиве создавать новый поток.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.util.List;
 
public class MyRunnable implements Runnable {
    private List<Integer> numbers;
    private int[] arrayToFind;
 
    public MyRunnable(List<Integer> numbers, int[] arrayToFind) {
        this.numbers = numbers;
        this.arrayToFind = arrayToFind;
    }
 
    private boolean isNumber(int n) {
        return n % 10 == 0;
    }
 
    @Override
    public void run() {
        for (int i = 0; i < arrayToFind.length; i++) {
            if (isNumber(arrayToFind[i]))
                numbers.add(arrayToFind[i]);
        }
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import java.util.ArrayList;
import java.util.List;
 
public class Generator {
    private List<Integer> numbers;
 
    public Generator() {
        numbers = new ArrayList<Integer>();
    }
 
    public List<Integer> getNumbers() {
        return numbers;
    }
 
    public void generateTenNumbers(List<int[]> arraysList) throws InterruptedException{
        for (int[] array : arraysList) {
            Thread t = new Thread(new MyRunnable(numbers, array));
            t.start();
            t.join();
        }
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import java.util.ArrayList;
import java.util.List;
 
public class Test {
 
    public static void main(String... args) throws InterruptedException{
        Generator g = new Generator();
        int[] arr1 = new int[] {1, 2, 10, 20};
        int[] arr2 = new int[] {2, 5, 50, 30};
 
        List<int[]> list = new ArrayList<int[]>();
        list.add(arr1);
        list.add(arr2);
 
        g.generateTenNumbers(list);
        System.out.println(g.getNumbers());
    }
}
Так нужно делать?

Единственное притормозить главный поток желательно пока другие не завершатся - кроме join-a после запуска потока это никак нельзя сделать?

Добавлено через 8 минут
такое еще:

Java
1
2
3
public static void main(String... args) throws InterruptedException{
        System.out.println(Thread.activeCount());
    }
Почему выводит 2? Я просто думал что идет 1 поток, главный поток выполнения программы, а второй это какой?

Добавлено через 8 минут
Простите уж за наглость, да, 1 тема 1 вопрос, но просто идет логическая цепочка.

Если та же задача(новый поток на каждый массив), но с уточнением, что максимальное число потоков равно 3, как тогда делать?
------------------
Покажите пожалуйста, как то что у меня переписать через пул потоков.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.09.2014, 20:58
Помогаю со студенческими работами здесь

С чего начать в задании
Нашёл себе задание, но никак не могу понять с чего конкретно начать. Как я понимаю, нужно: 1. Сделать базу данных, где будем хранить...

С чего начать Spring?
Хочу освоить Spring фреймворк, в нем ни бум-бум, толком даже не понимаю что это да как. Подскажите литературу для чайников или вообще с...

Посоветуйте с чего начать новичку
Добрый день, уважаемые Java программисты :senor: Посоветуйте с чего начать новичку изучать Java. Есть опыт программирования на VBA...

С чего начать изучать Java SE
Добрый вечер,народ подскажите с чего начать изучать Java SE,сам язык не знаю,сказали что начать изучать надо именно с J2SE.Посоветуйте...

С чего начать изучение Java
Посоветуйте с чего лучше начать изучать язык программирования java? Подскажите какую нибудь литературу для начала! И где можно скачать саму...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru