1. 程式人生 > >android開發教程關於使用java concurrent處理併發需求

android開發教程關於使用java concurrent處理併發需求

  android開發教程使用java concurrent處理併發需求

  java5開始,增加了concurrent api,用於併發處理。比如起多個執行緒併發從網路上下載圖片,然後在本地顯示。

  這裡寫個簡單的程式碼,來說明如何使用concurrent api提供的執行緒連線池。

  執行結果類似這樣:

  start do 1 task …

  >>main thread end.

  start do 2 task …

  start do 1 finished.

  start do 3 task …

  start do 2 finished.

  start do 3 finished.

  複製程式碼

  這裡的task1task3,都做的同樣的事情,讓它所屬的執行緒休眠2000ms

  private static void doSomething(int id) {

  System.out.println("start do " + id + " task …");

  try {

  Thread.sleep(1000 * 2);

  } catch (InterruptedException e) {

  e.printStackTrace();

  }

  System.out.println("start do " + id + " finished.");

  }

  複製程式碼

  如果沒有java自帶的這個api,需要自己或者使用不標準的第三方執行緒池api。用concurrent api寫起來很簡潔:

  public static void main(String[] args) {

  ExecutorService executorService = Executors.newFixedThreadPool(2);

  executorService.submit(new Runnable() {

  @Override

  public void run() {

  doSomething(1);

  }

  });

  executorService.submit(new Runnable() {

  @Override

  public void run() {

  doSomething(2);

  }

  });

  executorService.submit(new Runnable() {

  @Override

  public void run() {

  doSomething(3);

  }

  });

  executorService.shutdown();

  System.out.println(">>main thread end.");

  }

  複製程式碼

  首先,建立了一個執行緒池,裡面有2個執行緒:

  ExecutorService executorService = Executors.newFixedThreadPool(2);

  複製程式碼

  然後,通過submit()方法,提交一個Runnable的例項,這個例項將交由執行緒池中空閒的執行緒執行。

  在main執行緒中直接運行了:

  executorService.shutdown();

  複製程式碼

  不必擔心,執行緒池不會直接關閉的,只有當它執行完所有提交的任務後才會關閉。如果不寫這行,在本例中,應用將不會停止,因為雖然main執行緒(就是執行main方法的執行緒,也叫主執行緒)退出了,但是執行緒池中依然有執行緒執行,因此應用(程序)不會退出。

相關推薦

android開發教程關於使用java concurrent處理併發需求

  android開發教程之使用java concurrent處理併發需求   java5開始,增加了concurrent api,用於併發處理。比如起多個執行緒併發從網路上下載圖片,然後在本地顯示。   這裡寫個簡單的程式碼,來說明如何使用concurrent api提供

微信公眾平臺開發教程Java版(六) 事件處理(選單點選/關注/取消關注)

前言: 事件處理是非常重要的,這一章講講常見的事件處理 1、關注/取消關注 2、選單點選 事件型別介紹: 在微信中有事件請求是訊息請求中的一種。請求型別為:event 而event事件型別又分多種事件型別,具體分關注:subscribe取消關注:unsubscribe自定義選單點選:CLICK    根

Android開發java.lang.RuntimeException: Unable to start activity ComponentInfo{xxx}

net 控件 view etc spi pos rst ack data Android開發中java.lang.RuntimeException: Unable to start activity ComponentInfo{xxx}: java.lang.NullP

簡單的入門Android開發Java語言基礎[圖]

span 如何 都是 android 類繼承 try alt 不依賴 throw 簡單的入門Android開發和Java語言基礎[圖]前言:去年年底到今年年初,我做過簡單的智能家居,也實現過一些簡單的直連和遠程的智能家居。於是就將最簡單的通信發布出來:智能家居簡單實現—使用

Android開發教程 - 使用Data Binding(一) 介紹

定義 rar 關註 klist amp 團隊 清晰 library 減少 引言 Data Binding(數據綁定)發布於2015年的Google I/O大會,旨在減少Android開發中的大量模板代碼(比如findViewById()),增加代碼及邏輯清晰度,提高開發效

Android開發教程 - 使用Data Binding(三)在Activity中的使用

text 開發 follow wrap app size 做的 三方 綁定 修改activity布局 如果使Activity支持Data Binding,在布局的最外層加入"<layout>"標簽即可,由於是加在最外層,所以即使重構現有工程,

Android開發教程 - 使用Data Binding(二)集成與配置

集成 我們 enabled 總結 code ref href 管理工具 amp 安裝依賴庫,配置工程 Data Binding安裝和配置都非常簡單,僅需簡單的兩步即可完成。 更新SDK 打開SDK管理工具,下載最新的Android Support庫。 配置工程的Gradle

Android開發教程 - 使用Data Binding(八)使用自定義Interface

extend 方便 獲取 ble main implement lec click 簡單 為什麽要使用自定義Interface 我們平常在Android的開發中,比如如果要設置一個View的點擊事件,通常通過view.setOnClickListener()來實現的,這

Android開發教程 - 使用Data Binding(七)使用BindingAdapter簡化圖

() quest 需要 binding animate 規則 直接 什麽 void 什麽是BindingAdapter BindingAdapter用來設置布局中View的自定義屬性,當使用該屬性時,可以自定義其行為。 下面是一個簡單的例子: @BindingAdapter

Android開發教程 - 使用Data Binding Android Studio不能正常生成相

比較 開發 刪除 使用 ali ida start 打開 不能 有時候新建布局文件時或者定義布局中的變量時,不能即時生成相關Binding類或方法(其實是不能正確索引),也許是IDE支持的一些BUG,不過Android Studio對Data Binding的支持問題也僅限

Android開發中自定義表情併發送出去之經典的傳送表情

本文例項講述了Android程式設計開發實現輸入(自定義表情包)QQ表情影象併發送出去別人收到並解析出來的方法。分享給大家供大家參考,原來QQ微信等傳送表情其實發送的都不是表情,而是一個富文字,收到訊息後再解析得來的,具體效果如下 : 表情傳送出去是這樣:   最近在

Android開發java.lang.RuntimeException: Unable to start activity ComponentInfo{xxx}: java.lang.NullPoi

今天學習Android開發突然遇到了這個問題,查閱了很多資料,並且對集中原因進行了分析。  錯誤資訊字串:java.lang.RuntimeException: Unable to start activity ComponentInfo{com.first/com.f

android開發教程之startActivityForResult使用方法

最近做的一個小東西遇到這樣的情況,我從一個頁面MainActivity修改一些內容,需要跳轉到一個新的EditActivity去做修改操作,修改完成後就回到之前的MainActivity,因為資訊被修改了,最好還是從伺服器上重新獲取一下,那麼就要在MainActivity裡

Handelr(二上)-- MarsChen Android 開發教程學習筆記

package com.shumin.lbs08;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.support.v7.app.ActionBarActivity;impor

Android 開發JAVA動態設定控制元件大小

在我們的實際android開發中,我們經常需要對控制元件進行設定。在xml中設計大小,我們大家都很熟悉。那麼,使用java動態設定控制元件大小,該如何寫呢。以下是我寫的方法: /** * 設定控制元件大小 * @param view 控制元件

Android開發Java回撥機制的應用

  用Java寫了這麼久的程式,一直沒有理解什麼是回撥,在最近的Android開發工作中,一個偶然的需求讓我突然就對Java中的回撥有了一個理解,遂記錄之。   首先這個需求是這樣的,一個Activity中的有一個View,我需要在不同的觸發條件下更換這個View的Lay

Android開發教程--設定ImageView圖片的顯示比例

為適應不同螢幕的手機,ImageView圖片的顯示比例,可以使用android:scaleType屬性來處理,處理方式的有以下幾種: 1、在xml配置中使用:android:scaleType="centerCrop" 2、在程式碼中使用:   imageView.setS

Android 開發教程】使用Intent傳送簡訊

本章節翻譯自《Beginning-Android-4-Application-Development》,如有翻譯不當的地方,敬請指出。使用SmsManager類,可以在自己編寫的程式內部發送簡訊,而不需要呼叫系統的簡訊應用。然而,有的時候呼叫系統內建的簡訊應用會更加方便。這時

Android開發】圖形影象處理技術-實現Android動畫的兩種方式

在應用Android進行專案開發時,特別是在進行遊戲開發時,經常需要涉及動畫。Android中的動畫通常可以分為逐幀動畫(Frame Animation)和補間動畫(Tween Animation)兩種。下面將分別介紹這兩種動畫。 一.實現逐幀動畫(Frame Animat

微信公共號開發教程java版——微信網頁授權(八)

一:微信網頁授權介紹 關於網頁授權回撥域名的說明 1、在微信公眾號請求使用者網頁授權之前,開發者需要先到公眾平臺官網中的“開發 - 介面許可權 - 網頁服務 - 網頁帳號 - 網頁授權獲取使用者基本資訊”的配置選項中,修改授權回撥域名。請注意,這裡填