Thread 关于线程
来源:互联网 发布:礼物淘宝知乎 编辑:程序博客网 时间:2024/05/16 08:01
总的来说,android有主线程和子线程之分,主线程中只能做一些耗时极短的事(不超过5S,超过5S,触发ANR),比如加载视图,和用户交互等;子线程用于处理耗时任务,比如下载文件,网络请求等。
android系统会在APP启动的时候创建主线程,不会主动创建额外的线程。在开发中有2条规则要遵守:
——不能在 主线程 当中进行耗时的操作,不能阻塞我们的UI Thread;
——不能在 主线程 之外的线程当中操纵我们的UI元素;
这就带来了一个问题,线程间怎么通信?
在 Android当中,提供了两种方式来解决线程直接的通信问题,一种是通过Handler的机制,还有一种就是 AsyncTask 机制。
1.Handler机制
略
2.AsyncTask
AsyncTask:异步任务,从字面上来说,就是在我们的主线程运行的时候,异步的完成一些操作。AsyncTask允许我们的执行一个异步的任务在后台。我们可以将耗时的操作放在异步任务当中来执行,并随时将任务执行的结果返回给我们的UI线程来更新我们的UI控件。通过AsyncTask我们可以轻松的解决多线程之间的通信问题。
使用时有几点要注意:
1)AsyncTask需要在主线程实例化,并且调用;
2)只能被执行一次;
3)任务可以取消,调用.cancel方法,但是异步的线程还是会执行完,要终止线程需要另做处理;
关于Thread
1.创建
1)继承thread类
2)实现Runnable接口
2.关于线程安全
Android中的线程一般由Java实现,有Java的join()、wait()、sleep()、notify()等安全方法以及synchronized关键字等。
关于线程池Executors
一个线程池可以创建指定的线程,供程序使用。使用时,直接从线程池中取线程,不需要new了,线程任务完成,进入待命状态;在多任务情况下,能有效的节省资源,避免new thread的无畏开销甚至OOM的发生,并且显著的提升任务的处理效率;
Executors的工厂方法提供的5种不同的线程池,都是.newXXX,自动回收的,固定大小的,调度的,单例的.
Executors有5种不同的线程池:(java.util.concurrent.Executors-同时进行.执行):1.ExecutorService newCachedThreadPool = Executors.newCachedThreadPool(); // 一个没有限制最大线程数的线程池2.ExecutorService newFixedThreadPool = Executors.newFixedThreadPool(4);// 限制线程池大小为4的线程池3.ScheduledExecutorService newScheduledThreadPool = Executors.newScheduledThreadPool(4); // 一个可以按指定时间可周期性的执行的线程池4.ExecutorService newSingleThreadExecutor = Executors.newSingleThreadExecutor();// 每次只执行一个线程任务的线程池使用时调用他们的execute()方法即可;
ExecutorService executorService = Executors.newFixedThreadPool (5); executorService.execute(new Runnable() { @Override public void run() { } });
- Thread 关于线程
- 关于线程Thread的学习
- 关于Thread -----使用线程更新进度组件
- 关于线程Thread和协程Coroutine
- 关于线程Thread和协程Coroutine
- php中关于线程thread的使用
- 关于线程(Thread)的几个问题
- 线程Thread
- 线程 Thread
- 线程(Thread)
- 线程Thread。
- Thread 线程
- Thread 线程
- 线程---Thread
- thread线程
- Thread 线程
- Thread线程
- 线程thread
- Android zygote
- Maven项目使用Jetty启动之后发生如下错误:
- leetcode-Wiggle Sort II-324
- 初始ZooKeeper与集群搭建实例
- win10+VS2013+OPENCV如何配置于仕琪人脸检测算法
- Thread 关于线程
- UE4类修饰符
- 终于将深入理解计算机系统第四章模拟器运行起来了!
- 数据持久化
- scrollview嵌套recycleview事件分发遇到的问题
- 水晶报表 创建odbc数据源出现 在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配 问题解决
- ORACLE分区表的使用和管理
- WEBRTC SDP
- Git 学习之路->1