《Android进阶之光》--多线程编程
No1:
實現多線程的3中方法
1)繼承Thread,重寫run()方法
2)實現Runnable接口,并實現該接口的run()方法
3)實現Callable接口,重寫call()方法
public class TestCallable{//創建線程類public static class MyTestCallable implements Callable{public String call() throws Exception{return "Hello World";}}public static void main(String[] args){MyTestCallable mMyTestCallable = new MyTestCallable();ExecutorService mExecutorService = Executors.newSingleThreadPool();Future mfuture = mExecutorService.submit(mMyTestCallable);tyr{//等待線程結束,并返回結果 System.out.println(mfuture.get());}catch(Exception e){e.printStackTrace();}} }No2:
原子性:
對基本數據類型變量的讀取和賦值是原子性操作,即這些操作是不可被中斷的
x = 3; //語句1 y = x; //語句2 x++; //語句3只有語句1是原子性操作
語句2包含兩個原子性操作:先讀取x的值,再將x的值寫入工作內存。合起來就不是原子性操作
語句3包含3個原子性操作:讀取x的值,對x的值進行加1,向工作內存寫入新值。
所以,一個語句含有多個操作時,就不是原子性操作
volatile不保證原子性
No3:
可見性:
線程之間的可見性,一個線程修改的狀態對另一個線程是可見的。
當一個共享變量被volatile修飾時,它會保證修改的值立即被更新到主存,所以對其他線程是可見的。
No4:
有序性:
volatile、synchronized、Lock保證每個時刻只有一個線程執行同步代碼,這相當于是讓線程順序執行同步代碼,從而保證了有序性。
volatile禁止使用指令重排序
No5:
Android3.0版本之前的AsyncTask核心線程數是5個,允許創建的最大線程數為128,非核心線程空閑等待新任務的最長時間為1s。采用的阻塞隊列是LinkedBlockingQueue,容量為10.
No6:
在Android3.0以上版本AsyncTask使用并行的線程處理
asyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,"");No7:
阻塞隊列
阻塞隊列常用于生產者和消費者的場景,生產者是往隊列里添加元素的線程,消費者是從隊列里拿元素的線程。阻塞隊列就是生產者存放元素的容器,而消費者也只是從容器里拿元素
常見阻塞場景
1)當隊列中沒有數據的情況下,消費者端的所有線程會被自動阻塞(掛起),直到有數據放入隊列
2)檔隊列中填滿數據的情況下,生產者的所有線程都會被自動阻塞(掛起),直到隊列中有空的位置,線程被自動喚醒
轉載于:https://www.cnblogs.com/anni-qianqian/p/8506200.html
總結
以上是生活随笔為你收集整理的《Android进阶之光》--多线程编程的全部內容,希望文章能夠幫你解決所遇到的問題。