2016-02-06 2 views
0

Как я могу сделать эту загрузку от 2 до 3 файлов одновременно, и когда 1 заканчивает, он забирает другой? Сейчас он делает то, что ему нужно сделать, но требуется некоторое время, если вы загружаете, как 30 видео одновременно, поэтому я хочу, чтобы он загружал 2 или 3 за раз.Как выполнить несколько задач сразу?

try { 
      URL url; 
      byte[] buf; 
      int byteRead, byteWritten = 0; 
      url = new URL(getFinalLocation(fAddress));; 
      outStream = new BufferedOutputStream(new FileOutputStream(destinationDir + "\\" + localFileName)); 

      uCon = url.openConnection(); 
      is = uCon.getInputStream(); 
      buf = new byte[size]; 
      while ((byteRead = is.read(buf)) != -1) { 
       outStream.write(buf, 0, byteRead); 
       byteWritten += byteRead; 
      } 
      System.out.println("Downloaded Successfully."); 
      //System.out.println("File name:\"" + localFileName + "\"\nNo ofbytes :" + byteWritten); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } finally { 
      try { 
       is.close(); 
       outStream.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
+0

Try темы - https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html – radoh

ответ

2

Вы можете добавить этот код в класс, который реализует Runnable. Код будет идти в методе run(). (Вам необходимо реализовать этот метод на интерфейсе runnable.)

Затем вы создаете новые потоки и запускаете их, передавая свой runnable.

Thread thread = new Thread(new RunnableClass()); 
thread.start(); 

Вы должны реализовать определенную логику для прохождения fAddress строки в RunnableClass. (Через конструктор или метод, который вызывается до thread.start().)

Помогло ли вам это начать?

EDIT - Добавлен пример

public class Main { 

    public static void main(String[] args) { 

     Thread thread1 = new Thread(new MyRunnable("http://someaddress")); 
     thread1.start(); 

     Thread thread2 = new Thread(new MyRunnable("http://otheraddress")); 
     thread2.start(); 

    } 

    public static class MyRunnable implements Runnable { 

     String address; 

     public MyRunnable(String address) { 
      this.address = address; 
     } 

     @Override 
     public void run() { 
      // My code here that can access address 
     } 
    } 
} 
+0

Я так думаю, я «Посмотрите в документы на это, чтобы посмотреть, что происходит, но да, дайте мне какое-то направление. –

+0

@ J.Doe. Я добавил пример, чтобы еще раз иллюстрировать, как это сделать. – jheimbouch

+0

Спасибо, что действительно помогает –

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