詳細**參見demo
demo位址 -> flutter_isolatedemo
import 'dart:async';
import 'dart:io';
import 'dart:isolate';
import 'package:dio/dio.dart';
import 'package:flutter/foundation.dart';
void main()
//******************************* 多執行緒 ********************************
void tesisolatedemo()
// -------------------------- 多執行緒1 --------------------------
void isolatedemo1()
1、無序compute 是多執行緒執行,執行完的先後順序是無序的flutter: 3結束
flutter: 1結束
flutter: 2結束
flutter: 5結束
flutter: 4結束
// -------------------------- 多執行緒2 --------------------------
void isolatedemo2()
void func1(int count) {}
1.2.1、有序
future loaddata() );
}
flutter: 1結束compute 不加 return 是有序的,因為future 非同步但還是在主線程執行的,而且是順序新增寄**的,可以列印一下其執行緒。flutter: 2結束
flutter: 3結束
flutter: 4結束
flutter: 5結束
flutter: main可以發現都是在 main 主線程執行的。flutter: 1結束
flutter: main
flutter: 2結束
flutter: main
flutter: 3結束
flutter: main
flutter: 4結束
flutter: main
flutter: 5結束
在func1中列印一下執行緒
void func1(int count)
flutter: 1結束1.2.2、無序flutter: 2結束
malformed message
flutter: _spawn
flutter: _spawn
flutter: 3結束
flutter: 4結束
flutter: _spawn
flutter: _spawn
flutter: 5結束
flutter: _spawn
future loaddata() );
}
compute 加上 return 那麼loaddata 返回的就是 compute 之後執行緒的future。就不再是都在主線程了,所以就是無序的了。
//************************** 驗證一下then 到底是微任務還是什麼? **********************
void testthendemo() );
x.then((value) => print('c非同步1結束'));
print('d主任務');
}
驗證一下then 到底是微任務還是什麼?
flutter: d主任務可以發現,如果說then 是做為微任務加入的話,那它應該是在b微任務之後加入的,在新一輪的任務迴圈中,應該先執行b才對。根據執行結果,我們猜測應該是then 和 a非同步這個future 是同乙個任務迴圈中執行的,當then 沒有執行完的時候,這個任務迴圈是沒有結束的,當then執行完才會進入到下乙個任務迴圈去判斷微任務,事件任務等去執行。flutter: a非同步任務1
flutter: c非同步1結束
flutter: b微任務
目前沒有什麼官方說明這個到底算什麼。
//********************* timer ***********************
void testtimerdemo() );
print('來了');
}
timertimer 是非同步執行的flutter: 來了
flutter: 非同步任務!
timer的應用
詳細**參見demo
demo位址 -> wechat_demo
chat_page.dart
拖拽頁面(滑動頁面)的時候timer 並沒有停止,所以timer 和 ui 是在同乙個優先順序上。只有微任務優先順序最高
@override
void initstate()
});
當切換頁面的時候,再切換回來發現會重新建立了乙個新的time,這時候可以通過保持頁面狀態,不讓重新走initstate。但是有時候我們真的需要銷毀這個頁面,但是這個時候雖然頁面銷毀了,可以timer 還在。那麼就需要再頁面銷毀的時候去手動的銷毀timer,那就要用到 dispose
// 類似ios 中的dealloc
@override
void dispose()
super.dispose();
}
15 多執行緒
程序 進行中的程式,只有程式在執行過程中,才能稱之為程序。計算機cpu分配資源的最小單位。執行緒 每個程序至少包含乙個執行緒。程序和執行緒的關係就像車和車輪,執行緒不是越多越好,要結合實際的硬體條件。執行緒是cpu排程和分派的基本單位 執行緒執行的基本概念 單核心cpu的情況,執行緒是輪流交替執行,...
java多執行緒JDK1 5 二
5 public classexecutorcompletionserviceextends object implements completionservice 使用提供的executor來執行任務的completionservice。此類將安排那些完成時提交的任務,把它們放置在可使用 take...
第15章 多執行緒
模擬銀行取錢的問題 1.定義乙個account類 1 該account類封裝了賬戶編號 string 和餘額 double 兩個屬性 2 設定相應屬性的getter和setter方法 3 提供無參和有兩個引數的構造器 4 系統根據賬號判斷與使用者是否匹配,需提供hashcode 和equals 方法...