从0开始理解并发、线程与等待通知机制(中)
线程启动与终止线程启动方式继承Thread类并重写run()方法。实现Runnable接口并交给Thread执行。线程终止方式不建议使用stop()方法因其具有强制性可能导致资源未正确释放。推荐使用中断机制调用interrupt()方法设置中断标志位。线程生命周期详解线程状态分类新建态New线程对象创建但尚未启动。就绪态Runnable线程等待CPU调度。运行态Running线程正在执行。阻塞态Blocked等待获取锁。等待态Waiting无限期等待唤醒。超时等待Timed Waiting有限时间内等待唤醒。终止态Terminated线程执行完毕。线程状态转换图解通过一张图清晰展示线程状态之间的转换关系。线程调度机制协同式与抢占式协同式调度线程主动让出CPU使用权。缺点可能导致其他线程“饿死”。抢占式调度由操作系统决定何时让出CPU。优点资源利用率更高避免线程长期占用CPU。Java线程实现模式三种线程实现方式内核线程实现1:1每个线程对应一个操作系统线程。优点无需自行管理调度。缺点系统调用开销大线程数量受限。用户线程实现N:1多个线程映射到一个操作系统线程。优点线程切换快开销低。缺点缺乏操作系统支持难以实现阻塞操作。混合实现M:N用户线程与操作系统线程按比例映射。兼顾性能与调度灵活性。Java线程实现Java早期采用用户线程实现。JDK 1.2后改为内核线程实现HotSpot VM。线程优先级映射受操作系统限制实际效果不明显。协程Coroutine简介协程定义协程是一种轻量级线程由语言层面实现也称为“用户线程”。协程优势资源消耗低单个协程仅占几百字节。支持大规模并发数十万协程同时运行。协程适用场景IO密集型任务如网络请求、文件读写。不适用于计算密集型任务协程切换成本低于线程但在计算任务中无明显优势。Java中的协程实现使用第三方库如Kotlin协程、Quasar。JDK 19引入虚拟线程预览版未来将在JDK 21正式发布。守护线程Daemon Thread守护线程作用在后台执行支持性工作如垃圾回收、信号监听。与非守护线程区别当所有非守护线程结束时JVM自动退出守护线程随之终止。守护线程不负责资源释放不适合执行关键清理工作如文件关闭、解锁。线程间通信与协调线程间通信机制Java提供管道流PipedInputStream/PipedOutputStream实现线程间数据传输。字节流处理二进制文件字符流处理文本文件。线程协作案例顺序执行控制问题描述确保T2在线程T1执行完后执行T3在T2执行完后执行。解决方案使用join()方法。javat1.start(); t1.join(); // T2等待T1执行完 t2.start(); t2.join(); // T3等待T2执行完 t3.start();线程上下文切换与性能优化线程上下文切换类型线程调度切换。系统调用切换如IO读写、获取系统时间。中断切换。优化建议减少不必要的线程上下文切换。避免频繁系统调用如减少System.currentTimeMillis()的使用。使用异步日志输出等方式降低同步阻塞影响。线程池配置建议线程池大小配置原则计算密集型任务线程数 ≈ CPU 核心数。IO密集型任务线程数 ≈ CPU 核心数 × 2需根据具体测试调整。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2444037.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!