java中多线程
一,并行与并发
并发:(Concurrency)是同时处理很多事情(dealing with lots of things at once)/两个或者多个事件在同一时间段发生。
并行:(Parallelism)是同时执行很多事情(doing lots of things at once)/两个或者多个事件在同一时刻发送;
二,多进程与多线程
进程:是程序在计算机上的一次执行活动(应用程序),每一个进程都会有自己的独立的一块内存空间。
线程:值进程中的一个执行任务(控制单元),一个进程可以同时并发运行多个线层。一个进程中至少会有一个线程,为了提高效率,可以在一个进程中开启多个执行任务,即为多线程。
使用接口的匿名内部类:
使用类的匿名内部类:
对比维度 |
多进程 |
多线程 |
总结 |
数据共享、同步 |
数据共享复杂,需要用IPC;数据是分开的,同步简单 |
因为共享进程数据,数据共享简单,但也是因为这个原因导致同步复杂 |
各有优势 |
内存、CPU |
占用内存多,切换复杂,CPU利用率低 |
占用内存少,切换简单,CPU利用率高 |
线程占优 |
创建销毁、切换 |
创建销毁、切换复杂,速度慢 |
创建销毁、切换简单,速度很快 |
线程占优 |
编程、调试 |
编程简单,调试简单 |
编程复杂,调试复杂 |
进程占优 |
可靠性 |
进程间不会互相影响 |
一个线程挂掉将导致整个进程挂掉 |
进程占优 |
分布式 |
适应于多核、多机分布式;如果一台机器不够,扩展到多台机器比较简单 |
适应于多核分布式 |
进程占优 |