2013-04-11 3 views
0

Я выполняю программу для сети, где у меня есть определенное количество выполнения задач в цикле, она отлично работает, но когда есть какие-то изъяны из-за проблемы с сетью, она получила застрял в одной из задач. поэтому я хочу создать поток, который начинается с того момента, когда управление переходит в цикл, и после некоторой задержки оно завершает работу с продолжением процесса.начать поток, который завершает процесс по истечении заданного времени

для ПРИМЕР-

for (/*itearting condition */) 
{ 
    //thread start with specified time. 
    task1; 
    task2; 
    task3; 
    //if any execution delay occur then wait till specified time and then 
    //continue. 
} 

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

+0

В долгосрочной перспективе, вы могли бы быть лучше писать код, который является устойчивым против сетевых проблем. –

ответ

1

Нить может быть прекращена только при ее сотрудничестве (при условии, что вы хотите сохранить этот процесс). Благодаря сотрудничеству с потоком вы можете завершить его с помощью любого механизма завершения, который он поддерживает. Без его сотрудничества это невозможно. Обычный способ сделать это - спроектировать нить, чтобы разумно обрабатывать interrupted. Тогда у вас может быть другой поток, прерывающий его, если пройдет слишком много времени.

+0

Я хочу создать независимый поток непосредственно перед выполнением задач и начать многократно искать время и завершать себя в указанное время. – RTA

+0

Справа. Следуйте моему ответу. 1) Создайте нить, которую вы хотите прекратить, чтобы ее можно было прервать. 2) Запустите другой поток, чтобы прервать поток, если он занимает слишком много времени. –

0

Я думаю, что вам может понадобиться что-то вроде этого:

import java.util.Date; 

public class ThreadTimeTest { 

    public static void taskMethod(String taskName) { 
     // Sleeps for a Random amount of time, between 0 to 10 seconds 
     System.out.println("Starting Task: " + taskName); 
     try { 
      int random = (int)(Math.random()*10); 
      System.out.println("Task Completion Time: " + random + " secs"); 
      Thread.sleep(random * 1000); 
      System.out.println("Task Complete"); 
     } catch(InterruptedException ex) { 
      System.out.println("Thread Interrupted due to Time out"); 
     } 
    } 

    public static void main(String[] arr) { 
     for(int i = 1; i <= 10; i++) { 
      String task = "Task " + i; 
      final Thread mainThread = Thread.currentThread(); 
      Thread interruptThread = new Thread() { 
       public void run() { 
        long startTime = new Date().getTime(); 
        try { 
         while(!isInterrupted()) { 
          long now = new Date().getTime(); 
          if(now - startTime > 5000) { 
           //Its more than 5 secs 
           mainThread.interrupt(); 
           break; 
          } else 
           Thread.sleep(1000); 
         } 
        } catch(InterruptedException ex) {} 
       } 
      }; 
      interruptThread.start(); 
      taskMethod(task); 
      interruptThread.interrupt(); 
     } 
    } 
} 
+0

да точно ... большое спасибо, насколько хорошо вы понимаете проблему – RTA

Смежные вопросы