https://www.jianshu.com/p/646e3f2f53d1详细
1、ExecutorService
优点:创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
a. 重用存在的线程,减少对象创建、消亡的开销,性能佳。
b. 可有效控制最大并发线程数,提高系统资源的使用率,同时避免过多资源竞争,避免堵塞。
c. 提供定时执行、定期执行、单线程、并发数控制等功能。
ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
private ExecutorService fixedThreadPool = Executors.newFixedThreadPool(1);
cachedThreadPool.execute(new Runnable() {
@Override
public void run() {
try {
EthGetBalance ethGetBalance = web3j.ethGetBalance(address, DefaultBlockParameterName.LATEST).send();
String balance = Convert.fromWei(ethGetBalance.getBalance().toString(), Convert.Unit.ETHER).toString();
onListener.onlistener(Web3jConst.GetEthBalance, balance);
Log.e("+++", "balance:" + Convert.fromWei(ethGetBalance.getBalance().toString(), Convert.Unit.ETHER));
} catch (IOException e) {
e.printStackTrace();
onListener.onlistenerError(e.getMessage());
}
}
});
1.2 Executors.newFixedThreadPool(int n):创建一个可重用固定个数的线程池,以共享的无界队列方式来运行这些线程。
private ExecutorService fixedThreadPool= Executors.newFixedThreadPool(5);
2、AsyncTask
感觉不大灵活,是个许褚大胖子,还是上面的好,灵活强大,是赵云,长坂坡前,7进7出鸭
private class MyTask extends AsyncTask<String, Integer, String> {
// 方法1:onPreExecute()
// 作用:执行 线程任务前的操作
@Override
protected void onPreExecute() {
// 执行前显示提示
}
// 方法2:doInBackground()
// 作用:接收输入参数、执行任务中的耗时操作、返回 线程任务执行的结果
// 此处通过计算从而模拟“加载进度”的情况
@Override
protected String doInBackground(String... params) {
try {
int count = 0;
int length = 1;
while (count<99) {
count += length;
// 可调用publishProgress()显示进度, 之后将执行onProgressUpdate()
publishProgress(count);
// 模拟耗时任务
Thread.sleep(50);
}
}catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
// 方法3:onProgressUpdate()
// 作用:在主线程 显示线程任务执行的进度
@Override
protected void onProgressUpdate(Integer... progresses) {
}
// 方法4:onPostExecute()
// 作用:接收线程任务执行结果、将执行结果显示到UI组件
@Override
protected void onPostExecute(String result) {
// 执行完毕后,则更新UI
}
// 方法5:onCancelled()
// 作用:将异步任务设置为:取消状态
@Override
protected void onCancelled() {
}
}