在Handler 和 AsyncTask 就已经涉及到线程概念,操作甚至并发了。有需要好好了解一下。
参考《Java 多线程编程核心技术》
- sleep(),让当前"正在执行的线程"(Thread.currentThread())休眠。
- 终止线程:
- 使用退出标志,使线程正常退出
- stop()强行终止。(deprecated 不推荐)
- interrupt()中断线程
- this.interrupted();测试是否中断,执行后将状态标志置为 false;
- 内部调用currentThread().isInterrupted(ClearInterrupted:true);
- this.isInterrupted();测试 Thread 对象是否已经中断,不清除状态标志;
- 内部调用 isInterrupted(ClearInterrupted:false);
- stop()
- deprecated,会使一些清理工作得不到完成。同时会对一些锁定的对象“解锁”,导致数据不能同步处理,出现数据不一致。
- this.interrupted();测试是否中断,执行后将状态标志置为 false;
- suspend 暂停线程 和 resume恢复线程
- suspend 暂停线程不会释放锁(System.out.println()内部也是synchronized 的)
- yiled() 放弃当前 cpu 资源,将其让给其他任务占有 CPU。但是放弃时间和重新获得 cpu 的时间不确定。放弃后想重新执行必须要重新占有 cpu;
- 线程的优先级有继承性。A 线程启动 B 线程,B 线程的优先级默认与 A 一样;
- 守护线程(Daemon),当进程不存在非守护线程,则守护线程自动销毁
网友评论