为什么学多线程
- (硬件层面):摩尔定律(元器件数量提高,性能提高)失效,在cpu主频不再提高且核数增多的情况下,想让程序更快就要用到并行或者并发编程。
- (软件层面):充分利用多核CPU的性能,提高程序的性能。
- (多线程带来的问题):线程安全性问题
Java 多线程的相关概念(1把锁,2个并,3个程)
1把锁
synchronized关键字
2个并
并发(concurrent):宏观上一个CPU同时处理多个任务。实质上同一时刻只能处理一个任务。
并行(parallel):多个CPU同一时刻处理多个任务。
3个程
进程:进程是资源分配的基本单位,也就是每个进程有自己的内存空间和资源。打开任务管理器,一个一个程序就是进程。
线程:线程是轻量级的进程。是CPU执行调度的基本单位。多个线程共享进程的资源。
管程:管城是一种同步机制,用来保证同一时间只有一个线程能够访问到被保护的数据和代码。Monitor管程对象,每个实例对象都有一个Monitor对象也就是锁对象,用来保证同一时刻只能有一个线程访问保护的数据和代码。(锁对象,相当于线程访问的时候门上上一个锁,防止其他线程访问。访问完了后解锁)
Monitor对象会和实例对象一同创建和销毁。
用户线程和守护线程
用户线程:创建一个线程默认就是用户线程。
守护线程:守护线程是一个服务线程,在后台默默为其他线程服务,如果没有要服务的现场,守护线程会结束。通过Thread.isDeamon可以参看是否是守护线程。Thread.setDeamon(true)可以创建守护线程。