2016-09-01 41 views
1

我想运行两个runnables一个接一个线程。android运行多个可运行

这意味着当第一个可运行线程完成第二个线程启动时。

DownSpeedTester speedTester = new DownSpeedTester(); 
speedTester.setDownUrl(String.valueOf(urlDownload)); 
new Thread(speedTester).start(); 

UploadSpeedTester uploadSpeedTester = new UploadSpeedTester(); 
uploadSpeedTester.setUploadUrl(String.valueOf(urlUpload)); 
new Thread(uploadSpeedTester).start(); 

尝试使用newSingleThreadExecutor,但它没有成功。

ExecutorService es = Executors.newSingleThreadExecutor(); 
    Future< Boolean> result = es.submit(new Callable<Boolean>() { 
     public Boolean call() throws Exception { 
      //Download 
      DownSpeedTester speedTester = new DownSpeedTester(); 
      speedTester.setDownUrl(String.valueOf(urlDownload)); 
      new Thread(speedTester).start(); 
      return true; 
     } 
    }); 
    try { 
     boolean res = result.get(); 
     if (res == true){ 
      //Upload 
      Log.d("mceeli","UploadSpeedTester"); 
      UploadSpeedTester uploadSpeedTester = new UploadSpeedTester(); 
      uploadSpeedTester.setUploadUrl(String.valueOf(urlUpload)); 
      new Thread(uploadSpeedTester).start(); 
     } 
    } catch (Exception e) { 

    } 
    es.shutdown(); 

它仍然在一起运行。

请帮帮我。

+0

在第一个回调中调用第二个线程 – Amy

回答

3

可以使用的AsyncTask的运行两个线程此起彼伏。但如果你想使用线程,你可以使用

private static final int STEP_ONE_COMPLETE = 0; 
private static final int STEP_TWO_COMPLETE = 1; 

... 

private doBackgroundUpdate1(){ 
    Thread backgroundThread = new Thread() { 
     @Override 
     public void run() { 
      // do first step 

      // finished first step 
      Message msg = Message.obtain(); 
      msg.what = STEP_ONE_COMPLETE; 
      handler.sendMessage(msg); 
     } 
    } 
    backgroundThread.start(); 
} 
private doBackgroundUpdate2(){ 
    Thread backgroundThread = new Thread() { 
     @Override 
     public void run() { 
      // do second step 

      // finished second step 
      Message msg = Message.obtain(); 
      msg.what = STEP_TWO_COMPLETE; 
      handler.sendMessage(msg); 
     } 
    } 
    backgroundThread.start(); 
} 
private Handler handler = new Handler(){ 
    @Override 
    public void handleMessage(Message msg) { 
     switch(msg.what){ 
     case STEP_ONE_COMPLETE: 
      doBackgroundUpdate2(); 
      break; 
     case STEP_TWO_COMPLETE: 
      // do final steps; 
      break; 
     } 
    } 
} 
+0

非常感谢! –

1

使用单个线程执行,只是不产卵更多Thread S:

ExecutorService es = Executors.newSingleThreadExecutor(); 
DownSpeedTester speedTester = new DownSpeedTester(); 
speedTester.setDownUrl(String.valueOf(urlDownload)); 
es.submit(speedTester); 

UploadSpeedTester uploadSpeedTester = new UploadSpeedTester(); 
uploadSpeedTester.setUploadUrl(String.valueOf(urlUpload)); 
es.submit(uploadSpeedTester); 

es.shutdown();