Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Потоки. Объясните новичку, как передать изменяющуюся переменную в поток. / 9 сообщений из 9, страница 1 из 1
29.12.2012, 21:28:25
    #38097520
sgretsch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потоки. Объясните новичку, как передать изменяющуюся переменную в поток.
Есть класс, в который в переменные постоянно получает координаты. В нем две переменные longitude & latitude.
Внутренним классом запускается поток, который эти переменные рассылает при изменении.

Хочу вынести внутренний поток в самостоятельный класс, но как получать постоянно апдейты переменных? Через статические методы? Как это вообще делается нормальными руками? :)

Например:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
public Class Coords{

public String longitude;
public String latitude;

public class myThread implements Runnable{
@Override
public void run() {
SendClass.send(longitude, latitude);
}

public void onCreate() {
myThread runTh = new myThread();
bkgnThread = new Thread (runTh);
bkgnThread.start();
}
}
...
Рейтинг: 0 / 0
29.12.2012, 22:29:54
    #38097540
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потоки. Объясните новичку, как передать изменяющуюся переменную в поток.
sgretschЕсть класс, в который в переменные постоянно получает координаты. В нем две переменные longitude & latitude.
Внутренним классом запускается поток, который эти переменные рассылает при изменении.

Хочу вынести внутренний поток в самостоятельный класс, но как получать постоянно апдейты переменных? Через статические методы? Как это вообще делается нормальными руками? :)

Например:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
public Class Coords{

public String longitude;
public String latitude;

public class myThread implements Runnable{
@Override
public void run() {
SendClass.send(longitude, latitude);
}

public void onCreate() {
myThread runTh = new myThread();
bkgnThread = new Thread (runTh);
bkgnThread.start();
}
}



Путаная постановка задачи, кто куда рассылает непонятно.
В целом задача синхронизации данных решается по-разному, в зависимости от контекста.
Вариант 1) Нужно расшарить между n-потоками, но все они известны вначале. В таком случае при старте программы вы создаете объект Coords(с синхронизированными методами), и передаете эту ссылку, ну допустим, в конструкторы всех потоков. Это безопаснее чем шарить между всеми возможными потоками.
Вариант 2) Когда действительно нужно расшарить между всеми потоками. Тогда да, создается синглтон, или какая-либо другая общедоступная точка доступа, и объект Coord ложится туда, а все остальные оттуда вычитывают.
Вариант 3) Лучше вообще ничего не шарить, всеми правдами и неправдами нужно стараться этого избежать. Но если уж прям реально необходимо тогда вариант 1 и вариант 2

Ты задачу расскажи, может тут вариант 3 как раз.
...
Рейтинг: 0 / 0
29.12.2012, 22:35:06
    #38097543
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потоки. Объясните новичку, как передать изменяющуюся переменную в поток.
И еще уточнение, объект, который шарится обязательно должен быть потокобезопасным
...
Рейтинг: 0 / 0
29.12.2012, 23:04:26
    #38097561
sgretsch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потоки. Объясните новичку, как передать изменяющуюся переменную в поток.
Да я вроде всё рассказал, мож сам чего-то непонимаю. Есть класс А который постоянно получает координаты, есть поток B, который эти координаты рассылает. Как координаты из класса А, постоянно передавать в класс потока B (при условии что поток, это другой класс)? Поток надо запускать из класса А.
...
Рейтинг: 0 / 0
29.12.2012, 23:05:29
    #38097562
sgretsch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потоки. Объясните новичку, как передать изменяющуюся переменную в поток.
Координаты постоянно обновляются, поток должен быть запущен один раз ессно.
...
Рейтинг: 0 / 0
29.12.2012, 23:43:54
    #38097572
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потоки. Объясните новичку, как передать изменяющуюся переменную в поток.
sgretschДа я вроде всё рассказал, мож сам чего-то непонимаю. Есть класс А который постоянно получает координаты, есть поток B, который эти координаты рассылает. Как координаты из класса А, постоянно передавать в класс потока B (при условии что поток, это другой класс)? Поток надо запускать из класса А.
убрать поток и в Sett'ере класса А сразу СИНХРОННО отправлять в класс B
...
Рейтинг: 0 / 0
29.12.2012, 23:45:49
    #38097573
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потоки. Объясните новичку, как передать изменяющуюся переменную в поток.
sgretschПоток надо запускать из класса А.
вот класс А и будет НЕ запускать поток, а отправлять координаты.
...
Рейтинг: 0 / 0
30.12.2012, 01:40:13
    #38097598
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потоки. Объясните новичку, как передать изменяющуюся переменную в поток.
вот я тоже не догонял зачем здесь потоки
...
Рейтинг: 0 / 0
30.12.2012, 13:37:43
    #38097682
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потоки. Объясните новичку, как передать изменяющуюся переменную в поток.
Всегдя поражался лени авторов. Почему нельзя опубликовать хотя-бы
компилирующийся исходник?
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Потоки. Объясните новичку, как передать изменяющуюся переменную в поток. / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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