編輯:Android開發教程
一、如果是每個線程都執行相同的代碼,則可以使用同一個Runnable來實現共享
public class MultiThreadShareData { public static void main(String[] args) { new Thread(new ShareData()).start(); new Thread(new ShareData()).start(); } static class ShareData implements Runnable{ private int j = 100; @Override public synchronized void run() { j--; } } }
上面代碼中兩個線程共享數據實現對j變量的遞減操作,至於上面代碼中為什麼要使用一個靜態內部類,該類static的作用是不依賴外部類的實例創建對象。
二、如果每個線程執行的代碼不同,則需要使用不同的Runnable對象來實現共享
public class MultiThreadShareData { public static void main(String[] args) { final ShareData data1 = new ShareData(); //啟動第一個線程 new Thread(new Runnable() { @Override public void run() { data1.increment(); //加 } }).start(); //啟動第二個線程 new Thread(new Runnable() { @Override public void run() { data1.decrement(); //減 } }).start(); } static class ShareData{ private int j = 0; public synchronized void increment(){ j++; } public synchronized void decrement(){ j--; } } }
將上面代碼進修改(將數據作為外部類的成員變量,讓Runnable接口操作該成員變量)如下:
public class MultiThreadShareData { public static void main(String[] args) { ShareData data1 = new ShareData(); new Thread(new MyRunnable1(data1)).start(); new Thread(new MyRunnable2(data1)).start(); } static class MyRunnable1 implements Runnable{ private ShareData data1; public MyRunnable1(ShareData data1){ this.data1 = data1; } @Override public void run() { data1.increment(); } } static class MyRunnable2 implements Runnable{ private ShareData data1; public MyRunnable2(ShareData data2){ this.data1 = data1; } @Override public void run() { data1.decrement(); } } static class ShareData{ private int j = 0; public synchronized void increment(){ j++; } public synchronized void decrement(){ j--; } } }
 
Android UI缺省的標題欄由android:label 定義,顯示在屏幕左上角,Android允許Activity自定義標題欄,使用自定義 Layout重新設置標題
15 個 Android 通用流行框架大全 1. 緩存 DiskLruCache Java實現基於LRU的磁盤緩存 2.圖片加載 An
在Android應用程序中,很多地方需要引用到Context對象(Activity, Application,Service等)。Roboguice 使得引用Contex
上節openfire服務器已經搭建完成,這節看看,怎麼使用smack基於xmpp協議登錄openfire服務器,在服務器中創建好測試的賬號下面看android客戶端的代碼