测试必备之Java知识(四)—— 线程相关
线程相关Java多线程实现方式继承Thread,实现Runnable接口,实现Callable接口(能抛异常且有返回值,不常用) 为什么有了继承Thread方式还要有Runnable接口方式实现接口的方式适合多个相同程序代码的线程去处理同一个资源,可以避免Java中单继承的限制 为什么JVM启动是多线程的?因为至少启动了两个线程:主线程、垃圾回收线程 线程和进程的含义进程:是操作系统资源分配的基本单位,正在运行的程序 线程:是任务调度和执行的基本单位,程序使用CPU的最基本单位 多线程和多进程的含义多进程:操作系统能同时运行多个任务即程序 多线程:同一程序中有多个顺序流在执行 并发和并行的含义并行:逻辑上同时发生,一段时间内同时运行多个程序 并发:物理上同时发生,一个时间点同时运行多个程序 线程和进程的区别
线程调度模型分时调度模型:所有线程轮流使用CPU的使用权,平均分配每个线程占用CPU的时间片 抢占式调度模型:优先让优先级高的线程使用CPU,获得CPU时间片也越多,Java使用此模型 线程间通信——生产者消费者模式生产者:先看是否有数据,有就等待消费者消费(wait),没有就生产,生产完后通知消费者消费 消费者:先看是否有数据,有就消费,没有就等待生产者生产,通知生产者生产数据(notify) Java线程调度方式线程睡眠:Thread.sleep(long millis),使线程转换到阻塞状态,当睡眠结束后,就转为就绪状态 线程等待:Object.wait(),导致当前的线程等待,直到其他线程调用此对象的notify()或notifyAll() 线程唤醒:Object.notify()方法,唤醒在此对象上等待的单个线程。 线程让步:Thread.yield(),暂停当前正在执行的线程对象,把执行机会让给相同或更高优先级的线程 线程加入:join(),等待其他线程终止 线程状态初始状态:创建一个线程 就绪状态:线程调用start()方法 运行状态:线程被CPU调度 阻塞状态:放弃CPU使用权,暂停完毕后变回就绪状态(同步阻塞,等待阻塞,其他阻塞) 死亡状态:线程执行完或因异常退出了run()方法,线程结束了生命周期 线程状态转换(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |