日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java高并发编程:HandlerThread

發布時間:2025/4/16 java 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java高并发编程:HandlerThread 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. HandlerThread的使用

繼承自Thread,在run()方法中,執行了Looper.prepare()和Looper.loop(),和handler結合使用,實現后臺輪詢線程功能

  • start()
  • quit()
  • getLooper()
public class HandlerThreadActivity extends AppCompatActivity {private TextView mTvServiceInfo;private HandlerThread mCheckMsgThread;private Handler mCheckMsgHandler;private boolean isUpdateInfo;private static final int MSG_UPDATE_INFO = 0x110;//與UI線程相關的handlerprivate Handler mHandler = new Handler();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_thread_handler);initBackThread();//創建后臺線程mTvServiceInfo = (TextView) findViewById(R.id.id_textview);}@Overrideprotected void onResume() {super.onResume();isUpdateInfo = true;//開始查詢mCheckMsgHandler.sendEmptyMessage(MSG_UPDATE_INFO);}@Overrideprotected void onPause() {super.onPause();isUpdateInfo = false;//停止查詢mCheckMsgHandler.removeMessages(MSG_UPDATE_INFO);}private void initBackThread() {mCheckMsgThread = new HandlerThread("check-message-coming");mCheckMsgThread.start();mCheckMsgHandler = new Handler(mCheckMsgThread.getLooper()) {@Overridepublic void handleMessage(Message msg) {checkForUpdate();if (isUpdateInfo) {mCheckMsgHandler.sendEmptyMessageDelayed(MSG_UPDATE_INFO, 1000);}}};}//模擬從服務器解析數據private void checkForUpdate() {Thread.sleep(1000);//模擬耗時mHandler.post(new Runnable() {@Overridepublic void run() {String result = "msg";mTvServiceInfo.setText(result);}});}@Overrideprotected void onDestroy() {super.onDestroy();mCheckMsgThread.quit();//釋放資源} }

2. HandlerThread源碼

Handler的構造,其實就是在Handler中持有一個指向該Looper.mQueue對象,當handler調用sendMessage方法時,其實就是往該mQueue中去插入一個message,然后Looper.loop()就會取出執行

public class HandlerThread extends Thread {int mPriority;int mTid = -1;Looper mLooper;public HandlerThread(String name) {super(name);mPriority = Process.THREAD_PRIORITY_DEFAULT;}public HandlerThread(String name, int priority) {super(name);mPriority = priority;}protected void onLooperPrepared() {}@Overridepublic void run() {mTid = Process.myTid();Looper.prepare();synchronized (this) {mLooper = Looper.myLooper();notifyAll();}Process.setThreadPriority(mPriority);onLooperPrepared();Looper.loop();mTid = -1;}public Looper getLooper() {if (!isAlive()) {return null;}// If the thread has been started, wait until the looper has been created.synchronized (this) {while (isAlive() && mLooper == null) {try {wait();} catch (InterruptedException e) {}}}return mLooper;}public boolean quit() {Looper looper = getLooper();if (looper != null) {looper.quit();return true;}return false;}public boolean quitSafely() {Looper looper = getLooper();if (looper != null) {looper.quitSafely();return true;}return false;}public int getThreadId() {return mTid;} }

我們要在子線程中調用Looper.prepare() 為一個線程開啟一個消息循環,默認情況下Android中新誕生的線程是沒有開啟消息循環的。(主線程除外,主線程系統會自動為其創建Looper對象,開啟消息循環。) Looper對象通過MessageQueue來存放消息和事件。一個線程只能有一個Looper,對應一個MessageQueue。 然后通過Looper.loop() 讓Looper開始工作,從消息隊列里取消息,處理消息。

注意:寫在Looper.loop()之后的代碼不會被執行,這個函數內部應該是一個循環,當調用mHandler.getLooper().quit()后,loop才會中止,其后的代碼才能得以運行。

3. HandlerThread的特點

  • HandlerThread將loop轉到子線程中處理,說白了就是將分擔MainLooper的工作量,降低了主線程的壓力,使主界面更流暢。

  • 開啟一個線程起到多個線程的作用。處理任務是串行執行,按消息發送順序進行處理。HandlerThread本質是一個線程,在線程內部,代碼是串行處理的。

  • 但是由于每一個任務都將以隊列的方式逐個被執行到,一旦隊列中有某個任務執行時間過長,那么就會導致后續的任務都會被延遲處理。

  • HandlerThread擁有自己的消息隊列,它不會干擾或阻塞UI線程。

  • 對于網絡IO操作,HandlerThread并不適合,因為它只有一個線程,還得排隊一個一個等著。

4. 參考

詳解 Android 中的 HandlerThread

總結

以上是生活随笔為你收集整理的Java高并发编程:HandlerThread的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 任我爽在线 | 麻豆精品91| 五月天在线播放 | 成人永久免费视频 | 不卡三区 | 欧美极品jizzhd欧美 | 久久夜色网 | 亚洲综合五月天婷婷丁香 | 99国产精品| 日韩在线不卡 | 国产美女久久久 | 免费操片| 亚洲中文字幕无码不卡电影 | 在线看片网站 | 青青草华人在线视频 | 亚洲天堂91 | 十大黄台在线观看 | 国产毛片儿 | 欧美日韩国产麻豆 | 全部免费毛片在线播放 | 永久免费成人 | 亚洲网站在线 | 超碰碰碰碰 | 国产一级片免费 | 国产吞精囗交久久久 | 亚洲国产精品久久人人爱 | 国产主播av在线 | 在线观看免费av片 | 波多野结衣福利视频 | 五月婷在线 | 农村村妇真实偷人视频 | 欧美一级二级三级 | 日韩精品一区二区三区国语自制 | 国产午夜精品久久久久 | 校园春色欧美 | 成年人网站免费视频 | 亚州av成人 | 伊人国产女 | 亚洲天堂网一区 | 精品少妇无码av无码专区 | 六月丁香激情 | 日本体内she精高潮 男女视频在线免费观看 | 亚洲精品午夜国产va久久成人 | 不卡av免费在线观看 | 三上悠亚在线一区二区 | 午夜免费成人 | www.com欧美 | 不卡av电影在线观看 | 亚洲精品高清视频在线观看 | v天堂在线观看 | 俄罗斯黄色大片 | 桃色网站在线观看 | 国产人伦精品一区二区三区 | 钰慧的mv视频在线观看 | 冲田杏梨 在线 | 国产精品一区二区三区在线 | 欧美不卡网 | 9l蝌蚪porny中文自拍 | 免费观看黄一级视频 | 奇米影视av| 国产性生活 | 三级视频黄色 | 老熟妻内射精品一区 | 91精品国产91久久久久久吃药 | 波多野结衣一区二区三区 | 日本女人黄色 | 色中文字幕在线观看 | 欧美日本| 欧美特级一级片 | 色综合久久久久 | 四虎影院色 | 免费观看成人在线视频 | 69xx欧美 | 尤物视频在线看 | 伊人影院在线观看 | 中国黄色a级片 | 毛片免费在线观看视频 | 国产欧美日韩综合精品一区二区 | 波多野结衣视频免费在线观看 | 精品国产视频一区二区三区 | 91亚洲国产成人久久精品网站 | 熟妇大屁股一区二区三区视频 | 最新国产三级 | 番号动态图 | 97avcc| 91av在线视频播放 | 国产一区二区三区三州 | 成人中文在线 | 超碰caopeng | 美女100%视频免费观看 | 136fldh导航福利微拍 | 米奇7777狠狠狠狠视频 | 性色欲情网站iwww九文堂 | 国产码视频| 丁香婷婷在线观看 | 先锋影音一区二区三区 | 欧美韩一区二区 | 青青草官网 | 亚洲国产一二 |