Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поток не санкционировано завершается. Поток не санкционировано завершается. 
:(
    Опции темы
sanches_ru
Дата 11.3.2015, 00:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 3.2.2007

Репутация: нет
Всего: нет



Добрый день!

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

ОC: win7.

Код

public class test {
    public static void main(String[] args) {
        TestTread testTread = new TestTread("name");
        testTread.run();        
    }
}

class TestTread extends Thread{
      private String address;
      private BufferedReader br;
      private URL url;
      private String s;
      private int i=0;
      
    public TestTread(String name){
        super(name);
    }
    
    public void run(){
        do{
        try {
            address = "http://192.168.0.14/sec/?pt=6&cmd=get";
            url = new URL(address);
            
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            br = new BufferedReader(new InputStreamReader(url.openConnection().getInputStream()));
            s = br.readLine();
            System.out.println(s+" "+i++);
            br.close();
          
            
        } catch (IOException e) {
            System.out.println(" -----");
        }
        
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
        
            e.printStackTrace();
        }
        
    }while(true);
    }
}
    

Это сообщение отредактировал(а) sanches_ru - 11.3.2015, 00:56
PM MAIL   Вверх
AntonSaburov
Дата 11.3.2015, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



1. Почему вызывается  testTread.run();  а не  testTread.start(); ?
2. Как я понял нужен HTTP-запрос - может тогда лучше использовать HttpURLConnection и вызывать disconnect ?

PM MAIL WWW ICQ   Вверх
sanches_ru
Дата 11.3.2015, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 3.2.2007

Репутация: нет
Всего: нет



Цитата(AntonSaburov @ 11.3.2015,  09:42)
1. Почему вызывается  testTread.run();  а не  testTread.start(); ?
2. Как я понял нужен HTTP-запрос - может тогда лучше использовать HttpURLConnection и вызывать disconnect ?

1. Просто затупил. Исправил.
2. Сделал.(см. листинг).

добавил контроль стояния потока из другого методом isAlive(). 
   

Код

public class test {
    public static void main(String[] args) {
        TestTread testTread1 = new TestTread("name",100);
        TestTread testTread2 = new TestTread(testTread1,3000);
        testTread1.start();
        testTread2.start();
        System.out.println("testTread.isAlive()");
    }

}

class TestTread extends Thread{
     // private String address;
      private BufferedReader br;
      private URL url;
      private String s;
      private int sleepms=0;
      private int i=0;
      public Thread ttt=null;
      
      HttpURLConnection urlConnection;
      
    public TestTread(Thread name,int sleepms){
        super(name);
        ttt=name;
        this.sleepms=sleepms;
    }
    
    public TestTread(String name, int sleepms){
        super(name);
        this.sleepms=sleepms;
    }
    
    
    public String getPortHttpURLConnection(String address){
        try {
            //    address = "http://192.168.0.14/sec/?pt=6&cmd=get";
                url = new URL(address);
            } catch (MalformedURLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        
        try {
            urlConnection = (HttpURLConnection) url.openConnection();
            br = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
            s = br.readLine();
            br.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            urlConnection.disconnect();
           }
        
        return s;
        
    }
    
    public void run(){
        do{
            if(ttt==null){
                System.out.println(i+++" "+getPortHttpURLConnection("http://192.168.0.14/sec/?pt=6&cmd=get"));
            }else{
                System.out.println(ttt.isAlive());
            }
            try {
                Thread.sleep(sleepms);
            } catch (InterruptedException e) {
            
                e.printStackTrace();
            }    
    }while(true);
    }
}


Вывод работы программы:

Код

93 0:0
794 23:26
795 0:0
796 23:25
797 0:0
798 23:25
true
799 0:0
true
true



Как видно первый поток прекращает выводить данные на 799 итерации, хотя состояние потока остается активное.
вывод-
 HttpURLConnection - не помог решить проблему.
Какие мысли могут быть? 
PM MAIL   Вверх
AntonSaburov
Дата 12.3.2015, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



А где вызов HttpURLConnection.disconnect() ? Я думаю, что есть смысл закрывать соединения.
PM MAIL WWW ICQ   Вверх
sanches_ru
Дата 12.3.2015, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 3.2.2007

Репутация: нет
Всего: нет



Цитата(AntonSaburov @ 12.3.2015,  11:11)
А где вызов HttpURLConnection.disconnect() ? Я думаю, что есть смысл закрывать соединения.

53: строчка кода, блок "finally"
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1009 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.