powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Разделение данных между классами и потоками
25 сообщений из 27, страница 1 из 2
Разделение данных между классами и потоками
    #38397502
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.

Дано
Есть некоторый процесс, который осуществляет сбор данных из разных источников и загружает их в базу данных. Процесс для ускорения работы организует несколько потоков, каждый из которых пишет в базу. Процесс запускается периодически по расписанию.

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

Собственно вопрос
Как наиболее красиво передавать дату/время запуска очередного сеанса работы процесса в порождаемые классы, потоки?

P.S.
Файлы с какими-либо данными на жестком диске создавать нельзя.
...
Рейтинг: 0 / 0
Разделение данных между классами и потоками
    #38397518
DEVcoach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1) На старте процесса считать время (например, System.currentTimeMilis()).
2) Передать это время всем заинтересованным потокам через Runnable/Callable.
...
Рейтинг: 0 / 0
Разделение данных между классами и потоками
    #38397533
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Garrick,
вариант2:
- для различий "кто писал" - сохранять ID потока в БД
- для логирования времени - создать в БД поле временной метки TimeStamp
...
Рейтинг: 0 / 0
Разделение данных между классами и потоками
    #38397562
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DEVcoach2) Передать это время всем заинтересованным потокам через Runnable/Callable.
Ну, так в этом то и вопрос. Тащить во все конструкторы классов эту дату как-то "некрасиво", хотелось бы какого-то элегантного решения. Singleton класс, хранящий дату, или есть более красивое?
...
Рейтинг: 0 / 0
Разделение данных между классами и потоками
    #38397567
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Garrick,
вариант2:
- для различий "кто писал" - сохранять ID потока в БД
- для логирования времени - создать в БД поле временной метки TimeStamp
Тогда возникает такая же проблема передачи этого ID всем классам и потокам.
...
Рейтинг: 0 / 0
Разделение данных между классами и потоками
    #38397594
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GarrickPetro123Garrick,
вариант2:
- для различий "кто писал" - сохранять ID потока в БД
- для логирования времени - создать в БД поле временной метки TimeStamp
Тогда возникает такая же проблема передачи этого ID всем классам и потокам.
afaik есть API функция изнутри потока - Дай ID потока
...
Рейтинг: 0 / 0
Разделение данных между классами и потоками
    #38397597
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GarrickТащить во все конструкторы классов эту дату
а год тащить тебе не надо?
Что даст тебе время, если она не такое точное для потоков?
...
Рейтинг: 0 / 0
Разделение данных между классами и потоками
    #38397616
rfq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Garrick,

В общем виде - вам нужен глобальный контекст для всего процесса загрузки данных, и время начала - один из элементов этого контекста. Скорее всего, вам понадобятся и другие элементы контекста - соединения или параметры соединения с базой данных, например. Для обеспечения доступа к контексту используются разнообразные фреймворки с dependency injection - Spring, Guice, и т.п. Если они для вас тяжеловесны, сохраняйте контекст как InheritableThreadLocal - достаточно создать и прописать контекст в главном потоке, и он будет доступен во всех дочерних потоках.
...
Рейтинг: 0 / 0
Разделение данных между классами и потоками
    #38397617
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Garrick,
кстати, Имя или ИД источника вам не важен?
Т.к. обычно - поток на источник. Следовательно, Ид потока не нужен. А Ид_поставщика уже есть и идёт в БД.
...
Рейтинг: 0 / 0
Разделение данных между классами и потоками
    #38397621
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rfq,
он непонятно что логирует.
Если нужно идентифицировать потоки, то Глобальный контекст не нужен.
...
Рейтинг: 0 / 0
Разделение данных между классами и потоками
    #38397698
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rfqGarrick,

В общем виде - вам нужен глобальный контекст для всего процесса загрузки данных, и время начала - один из элементов этого контекста. Скорее всего, вам понадобятся и другие элементы контекста - соединения или параметры соединения с базой данных, например. Для обеспечения доступа к контексту используются разнообразные фреймворки с dependency injection - Spring, Guice, и т.п. Если они для вас тяжеловесны, сохраняйте контекст как InheritableThreadLocal - достаточно создать и прописать контекст в главном потоке, и он будет доступен во всех дочерних потоках.
Да, наверное что-то такое. Поподробнее где посмотреть?

Petro123он непонятно что логирует.
Загрузка данных в базу происходит "сеансами", нужно в базе сохранить "идентификатор" сеанса загрузки - это дата/время (TIMESTAMP), чтобы потом внутри базы можно было разделить данные по "сеансам". Сам сеанс может длится до нескольких часов, поэтому, требуется какая-то "глобальная" переменная, инициализированная единожды, доступная для всех потоков, порождённых в текущем сеансе работы.
...
Рейтинг: 0 / 0
Разделение данных между классами и потоками
    #38397766
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GarrickЗагрузка данных в базу происходит "сеансами", нужно в базе сохранить "идентификатор" сеанса загрузки - это дата/время (TIMESTAMP), чтобы потом внутри базы можно было разделить данные по "сеансам". Сам сеанс может длится до нескольких часов, поэтому, требуется какая-то "глобальная" переменная, инициализированная единожды, доступная для всех потоков, порождённых в текущем сеансе работы.
Если ты не в курсе, спроси у постановщика:
- что такое термин сеанс при многопотоковости. Т.е. в еденицу времени будет 10 потоков с Одним временем. Это будет один сеанс на 100 поставщиков данных?
- старт одного потока от другого может отличаться на милли-микросекунду. Т.е. допустимо, что будет огрубление и у обоих потоков будет Один сеанс?
- Какая связь Сеанс - Поток?
...
Рейтинг: 0 / 0
Разделение данных между классами и потоками
    #38397838
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Если ты не в курсе, спроси у постановщика:
- что такое термин сеанс при многопотоковости. Т.е. в еденицу времени будет 10 потоков с Одним временем. Это будет один сеанс на 100 поставщиков данных?
- старт одного потока от другого может отличаться на милли-микросекунду. Т.е. допустимо, что будет огрубление и у обоих потоков будет Один сеанс?
- Какая связь Сеанс - Поток?
Если обратили внимание, слово "сеанс" я взял в кавычки, т.к. это не имеет отношение к какой-либо терминологии Java. В данном случае "сеанс" это именно из один сеансов (как кино в кинотеатре) загрузки данных в базу, таких сеансов в течении суток несколько, необходимо внутри базы отличать один от другого.

Petro123Т.е. в еденицу времени будет 10 потоков с Одним временем. Это будет один сеанс на 100 поставщиков данных?
Да, нужно именно одно единое время с точностью до миллисекунд для всех источников и потоков, рождённых в одном "сеансе" загрузки данных в независимости от времени "рождения" самого потока. По-простому нужно время старта программы.
...
Рейтинг: 0 / 0
Разделение данных между классами и потоками
    #38397842
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Garrick,
+1 к варианту с InheritableThreadLocal
...
Рейтинг: 0 / 0
Разделение данных между классами и потоками
    #38397846
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Garrick,
- В проектировании, есть Временная диаграмма.
Давай на пальцах:
ВИ №1
- 26.04.2013 11:17:51 включил комп - стартовал процесс в автозагрузке
- 26.04.2013 11:17:53,13 - стартовало 15 потоков для 15-ти источников данных
- 26.04.2013 17:00:00 - стоп потока 1
..........
- 26.04.2013 18:00:13 - стоп потока 15

Что хотел увидеть в БД?
ЗЫ. Перед программированием пишут ВИ и диаграммы
...
Рейтинг: 0 / 0
Разделение данных между классами и потоками
    #38397858
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

- 26.04.2013 11:17:51 включил комп - стартовал процесс в автозагрузке
...
Рейтинг: 0 / 0
Разделение данных между классами и потоками
    #38397882
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123GarrickЗагрузка данных в базу происходит "сеансами", нужно в базе сохранить "идентификатор" сеанса загрузки - это дата/время (TIMESTAMP), чтобы потом внутри базы можно было разделить данные по "сеансам". Сам сеанс может длится до нескольких часов, поэтому, требуется какая-то "глобальная" переменная, инициализированная единожды, доступная для всех потоков, порождённых в текущем сеансе работы.
Если ты не в курсе, спроси у постановщика:
- что такое термин сеанс при многопотоковости. Т.е. в еденицу времени будет 10 потоков с Одним временем. Это будет один сеанс на 100 поставщиков данных?
- старт одного потока от другого может отличаться на милли-микросекунду. Т.е. допустимо, что будет огрубление и у обоих потоков будет Один сеанс?
- Какая связь Сеанс - Поток?

Долой singleton! :-)

В БД нужна сущность <Сеанс> с датой старта и завершения, ID-ник прилагается (ID_Сеанса, Время_Старта, Время_Завершения).
Нужна сущность <Поток> (ID_Потока, ID_Сеанса) которая связана с сущностью <Сеанс>
И нужна сущность <Данные> (ID_Потока, время, данные)

Все это можно преобразовать в <Данные> (ID_Сеанса, ID_Потока, время, данные)

Тогда продолжительность сеанса SELECT ID_Сеанса, min(время) as Время_Старта, max(время) as Время_Завершения GROUP BY ID_Сеанса

В программе просто нужно создавать уникальный ID_Сеанса и передавать в поток, поток создает для себя уникальный ID_Потока и сохраняет данные в таблицу.

А Singletin не нужен... совсем. :-)
...
Рейтинг: 0 / 0
Разделение данных между классами и потоками
    #38397887
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul,
))
3 варианта. От простого к сложному оверхеду)
- в конструкторе (прозрачность кода)
- Сущность Сеанс (по ООП)
- nheritableThreadLocal (оверхед??)
imho
...
Рейтинг: 0 / 0
Разделение данных между классами и потоками
    #38398109
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Garrick Надо
Сохранять в базе в каждой записи, созданной процессом, дату/время начала работы процесса, т.е. датау/время очередного запуска процесса, чтобы можно было впоследствии разделить результаты сеансов работы этого процесса JDBCAppender log4j или аналог из используемой вами библиотеки.
...
Рейтинг: 0 / 0
Разделение данных между классами и потоками
    #38398137
Sergunka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Garrick Собственно вопрос
Как наиболее красиво передавать дату/время запуска очередного сеанса работы процесса в порождаемые классы, потоки?


Для этого в Java есть принцип closure

http://en.wikipedia.org/wiki/Closure_(computer_science)#Local_classes_.28Java.29
...
Рейтинг: 0 / 0
Разделение данных между классами и потоками
    #38398461
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov JDBCAppender log4j или аналог из используемой вами библиотеки.
Чем это может помочь?
...
Рейтинг: 0 / 0
Разделение данных между классами и потоками
    #38398466
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergunkaGarrick Собственно вопрос
Как наиболее красиво передавать дату/время запуска очередного сеанса работы процесса в порождаемые классы, потоки?


Для этого в Java есть принцип closure

http://en.wikipedia.org/wiki/Closure_(computer_science)#Local_classes_.28Java.29
Т.е. если у меня в классе, реализующем поток, нагорожена гора кода по подключению к источнику данных, выборки и проверки данных, загрузки их в базу и пр., всё это надо реализовать в анонимном классе?
...
Рейтинг: 0 / 0
Разделение данных между классами и потоками
    #38399332
Sergunka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GarrickSergunkaпропущено...


Для этого в Java есть принцип closure

http://en.wikipedia.org/wiki/Closure_(computer_science)#Local_classes_.28Java.29
Т.е. если у меня в классе, реализующем поток, нагорожена гора кода по подключению к источнику данных, выборки и проверки данных, загрузки их в базу и пр., всё это надо реализовать в анонимном классе?

В Java closure реализовано таким образом - другого нет. В локальном классе Вам собственно нужно реализовать исключительно вызов
всей вашей дребедени - это уже скажем исключительно ваши способности по архитектуре и дизайну, но очевидно, что не фатально даже если вы тупо там процедурками опишите.
...
Рейтинг: 0 / 0
Разделение данных между классами и потоками
    #38399333
Sergunka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Garrick нагорожена гора кода по подключению к источнику данных

К слову сказать для этой горы кода имеет очень большой смысл ознакомится с дизайн-патерном Thread Pool Executor все одно рано или поздно понадобится

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/ThreadPoolExecutor.html
http://en.wikipedia.org/wiki/Thread_pool_pattern
...
Рейтинг: 0 / 0
Разделение данных между классами и потоками
    #38400593
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GarrickЧем это может помочь?Логируете работу своего приложения и получаете записи в базе.
Или это как-то неочевидно?
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Разделение данных между классами и потоками
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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