Форум программистов, компьютерный форум, киберфорум
Наши страницы

Модификатор synchronized и Runnable - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Прокладка маршрута http://www.cyberforum.ru/android-dev/thread1646444.html
Всем привет. Хочу реализовать приложение для прокладке оптимального маршрута (яндекс метро для примера) для общественного транспорта в своём городе (насиление 500\600 тыс. чел. ) Кто в курсе с чего...
Программирование Android Определение местоположения Только начинаю осваивать программирование для андроида. Английский знаю плохо, поэтому толковой литературы на русском найти не смог :) Вот собственно вопрос: Что необходимо(в техническом и... http://www.cyberforum.ru/android-dev/thread1646435.html
Сбой OutOfMemoryError Программирование Android
java.lang.OutOfMemoryError: Failed to allocate a 12960012 byte allocation with 5594672 free bytes and 5MB until OOM at dalvik.system.VMRuntime.newNonMovableArray(Native Method) at...
Программирование Android Потерял код программы, как восстановить из приложения?
Здравствуйте, уважаемые программисты! Мне очень нужна ваша помощь!! Дело в том, что я потерял код своей программы, можно ли его как-то восстановить, если у меня есть она на телефоне, как-то...
Программирование Android Непонятная ошибка http://www.cyberforum.ru/android-dev/thread1646374.html
Error:Error: Duplicate resources: D:\Education\Программы\passwordgenerator\app\src\main\res\drawable\yandex.png:drawable/yandex,...
Программирование Android Крэшится при запуске. Небольшой и простой код Приложение крэшится при запуске. Что я сделал не так? Также, пользуясь случаем, хочу узнать - как запросить у пользователя при включении приложухи включить bluetooth? Я закомментировал... подробнее

Показать сообщение отдельно
DarkVortex
103 / 69 / 18
Регистрация: 07.07.2014
Сообщений: 239
25.01.2016, 12:55  [ТС]
Цитата Сообщение от YuraAAA Посмотреть сообщение
Этот synchronized вообще никак не влияет.
Так лучше?
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class SyncThread implements Runnable{
    private static final Object lock = new Object();        
    
    public void run() {
        synchronized(lock) {
            Log.d("TAG", "run() start");
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            Log.d("TAG", "run() end");
        }
    }
}
Java
1
2
3
4
5
6
        Thread sync_thread = new Thread(new SyncThread());
        sync_thread.start();
        Thread sync_thread2 = new Thread(new SyncThread());
        sync_thread2.start();
        Thread sync_thread3 = new Thread(new SyncThread());
        sync_thread3.start();
Лог:
Bash
1
2
3
4
5
6
D/TAG     (19792): run() start
D/TAG     (19792): run() end
D/TAG     (19792): run() start
D/TAG     (19792): run() end
D/TAG     (19792): run() start
D/TAG     (19792): run() end
Добавлено через 1 час 39 минут
Печаль вся в том, что класс этого потока у меня в отдельном dex лежит и довольно часто в фоне обновляется. Если dex файл перегрузить новый класс этого потока напрочь забудет о синхронизации и о том что его устаревшая копия уже работает он не узнает.

Добавлено через 1 час 36 минут
В итоге сделал вот так:
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
class SyncThread implements Runnable{
    public void run() {
        Set<Thread> all_stack = Thread.getAllStackTraces().keySet();
        for(Thread t : all_stack){
            if(t.getName().contains("SyncThread")){
                t.interrupt();
            }
        }
        Thread ct = Thread.currentThread();
        String tid = String.valueOf(ct.getId());
        ct.setName("SyncThread-" + tid); 
        
        Log.d("TAG", "run() start");
        while(!Thread.interrupted()){
            Log.d("TAG", "run() " + tid + " - " + String.valueOf(ct.getName()));
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                ct.interrupt();
            }
        }
        Log.d("TAG", "run() end");
    }
}
Новый поток тормознет старый, даже если это уже 2 разных класса

Добавлено через 3 минуты
Конечно если их не запускать одновременно, но в моем случае это невозможно
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru