編輯:關於Android編程
在Java的util.concurrent.locks包下有關於鎖的接口和類如下:

先看一段代碼:
package com.codeing.snail.test;
public class ReadWriteLockTest {
public static void main(String[] args) {
final Output output = new Output();
new Thread(){
public void run() {
while(true){
output.output("CodeingSnail");
}
};
}.start();
new Thread(){
public void run() {
while(true){
output.output("陽光小強");
}
};
}.start();
}
static class Output{
public void output(String name){
char[] arry = name.toCharArray();
for(int i = 0; i < arry.length; i++){
System.out.print(arry[i]);
}
System.out.println();
}
}
}輸出的結果如下:

如果我們想讓“CodeingSnail"和“陽光小強"兩個字符串都能完整輸出,就需要使用synchronized關鍵字將輸出部分聲明,如下:
public synchronized void output(String name){
char[] arry = name.toCharArray();
for(int i = 0; i < arry.length; i++){
System.out.print(arry[i]);
}
System.out.println();
}其實,除了synchronized關鍵字之外,還可以使用鎖(Lock)來實現同步。
ReentrantLock lock = new ReentrantLock();
public void output(String name){
lock.lock();
try{
char[] arry = name.toCharArray();
for(int i = 0; i < arry.length; i++){
System.out.print(arry[i]);
}
System.out.println();
}finally{
lock.unlock();
}
}上面代碼使用try...finally語句塊是為了防止出現異常執行不到unlock方法,ReentrantLock是Lock的實現類,Lock的作用和synchronized類似,但更加面向對象,要實現同步就必須使用同一個lock對象。 class CachedData {
Object data;
volatile boolean cacheValid;
final ReentrantReadWriteLock rwl = new ReentrantReadWriteLock();
void processCachedData() {
rwl.readLock().lock();
if (!cacheValid) {
// Must release read lock before acquiring write lock
rwl.readLock().unlock();
rwl.writeLock().lock();
try {
// Recheck state because another thread might have
// acquired write lock and changed state before we did.
if (!cacheValid) {
data = ...
cacheValid = true;
}
// Downgrade by acquiring read lock before releasing write lock
rwl.readLock().lock();
} finally {
rwl.writeLock().unlock(); // Unlock write, still hold read
}
}
try {
use(data);
} finally {
rwl.readLock().unlock();
}
}
}假如有多個線程來讀取數據,第一個線程進來先上一把寫鎖進行數據寫入(先釋放讀鎖),寫入完成後將寫鎖降級為讀鎖(第15行),其他線程在讀取數據的時候上讀鎖後互不影響。這樣可以提高讀取效率。
白話開發——自己動手編譯Android源碼
簡單的介紹了Android Studio代碼調試的一些技巧.現在呢,我們來談談android源碼編譯的一些事.(俺認為,作為android developer人人都應該有
友盟集成系列之用友盟SDK解決產品經理,營銷經理的各種需求
在上一篇文章中我們已經完成對友盟SDK的基本集成,但是要滿足產品經理對一個APP的期望,基本集成的功能遠遠是不夠的,此時我們需要更進一步的集成友盟SDK的功能1.賬號統計
Android 天氣預報(2)
之前實現過了天氣預報的功能 但是真的好丑 真的只是實現功能 所以上一篇博客也沒有貼出圖片 這次 相對於第一個 首先是界面做了調整 其次就是 之前那個只能查看實時天氣 這個
Android必知必會-帶列表的地圖POI周邊搜索
背景先看效果圖:(以公司附近的國貿為中心點)上面是地圖,下面是地理位置列表,有的只有地理位置列表(QQ動態的位置),這是個很常見的功能。它有個專門的叫法:POI周邊搜索。