资讯动态

Java深入理解并发、线程、与等待通知机制(一)

发布时间:2026/8/21 10:50:53 来源:尧图企业网站定制
并发编程概述并发编程的重要性大厂招聘要求掌握多线程编程能力。并发编程是升职加薪的重要技能之一。并发提升响应速度、实现异步化、充分利用CPU资源。单核与多核处理即使在单核处理器上也可通过并发实现多个任务交替执行。多核处理器下并发能真正实现并行执行。QQ/微信并发示例输入文字、发送消息、接收信息三者同时发生体现并发特性。若使用单线程则需串行完成以上操作用户体验差。进程与线程概念解析进程定义进程是一个程序的实例包含指令、内存管理、I/O操作等。类比面向对象中类与对象的关系程序是类进程是对象。进程是操作系统中资源分配的最小单位。线程定义线程是操作系统中CPU调度的最小单位。一个进程中可以包含多个线程但线程必须依附于进程存在。Linux早期无独立线程概念后称为轻量级进程LWP。Java中的线程机制JVM本身作为一个进程内部自动启动多个线程如主线程、Finalizer线程、Reference Handler线程等。即使是最简单的Java程序也会默认启动多个线程。进程间通信方式常见IPC机制管道Pipe分为匿名管道父子进程通信与命名管道任意两个进程通信。信号Signal用于向应用程序发送特定事件通知。消息队列Message Queue类似MQ用于进程间传递消息。共享内存Shared Memory多个进程访问同一块内存区域效率高但需同步控制。信号量Semaphore用于控制对共享资源的访问。套接字Socket支持跨机器通信也可用于本地进程通信Unix Domain Socket。CPU核心与线程关系物理核心与逻辑处理器物理核心数决定实际并行能力。逻辑处理器来自超线程技术允许一个物理核心模拟多个逻辑核心。Runtime类获取核心数Runtime.getRuntime().availableProcessors()返回的是逻辑处理器数量。不同架构平台Intel vs AMD/ARM返回结果可能不同。上下文切换原理上下文切换定义操作系统保存当前线程状态并加载另一个线程状态的过程。包括寄存器、程序计数器、缓存数据等。上下文切换代价一次上下文切换通常需要约5,000~20,000个时钟周期。相较之下普通指令执行只需几个到几十个时钟周期。性能调优建议上下文切换频繁会导致性能下降。使用工具如vmstat、pidstat监控切换频率。并发与并行区别并行Parallelism同一时刻执行多个任务。依赖多核CPU如两个队伍同时使用两台售货机。并发Concurrency一段时间内交替执行多个任务。如一个售货机被两个队伍轮流使用。体现为时间片轮转下的“看似同时”。Java线程创建方式继承Thread类创建子类并重写run()方法。实例化后调用start()启动线程。实现Runnable接口实现run()方法传入Thread构造器。更推荐使用避免类继承限制。Callable FutureTaskCallableV提供返回值适用于需要结果的任务。FutureTask包装Callable作为Runnable传入线程。通过future.get()获取异步执行结果。线程终止方式自然终止run()方法执行完毕。抛出未捕获异常导致提前结束。强制终止不推荐stop()、suspend()、resume()等方法已废弃。原因不会释放资源易造成死锁、文件损坏等问题。中断机制推荐调用interrupt()设置中断标志位为true。线程主动检查isInterrupted()或interrupted()状态。阻塞方法如sleep()、get()抛出InterruptedException可响应中断。线程启动与运行区别start()方法启动新线程在JVM中注册并与操作系统线程绑定。只能调用一次否则抛出IllegalThreadStateException。run()方法普通方法直接调用仅在当前线程中执行。可重复调用不影响线程状态。示例调用thread.run()将在主线程中执行

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价