进程与线程
问题:什么是进程,什么是线程
进程是程序的一次执行过程,是一个动态的概念,进程是系统资源分配的基本单位,每一个进程都拥有独立的地址空间,进程之间无法直接相互通信,需要借助管道、文件、套接字等手段
线程是进程的一个执行单元,是 CPU 调度和执行的基本单位
问题:进程与线程有什么区别
1、进程是执行中的一段程序,而一个进程执行中的每个任务即为一个线程。如果把进程比作一辆货车,那么线程就是车厢
2、一个线程只能属于一个进程,而一个进程能包含多个线程
3、进程之间不会相互影响,而线程之间容易相互影响
4、线程的开销比进程少
5、不同进程无法共享资源,而同一进程下的不同线程可以轻易共享资源
6、线程无地址空间,它包括在进程的地址空间中
什么是 J.U.C
JUC 是 java.util.concurrent 工具包的简称,是专门用来处理多线程并发的工具包
并发与并行
并发指的是在单核 CPU 下,在同一个时间段内,多个事件的快速交替实行模拟多线程,CPU 给每个线程分配时间片,会出现 上下文切换 问题
并行指的是在多核 CPU 下,多个事件在 同一时刻 发生,多个线程同时执行
监视器
监视器即管程(Monitor),就是我们说的锁。管程是一种同步机制,它保证在同一个时间内,只有一个线程访问被保护数据或代码
同步与异步
同步:表示需要等到前一个任务执行完毕之后,才能进行下一个任务
异步:不同的任务之间不会相互等待
JUC 下的主要类
1、锁相关类。如 Lock,ReentrantLock
2、线程管理类。如 Thead、ThreadLocal
3、线程同步类。如 CountDownLatch、CyclicBarrier、Semaphore
4、并发集合类。如 ConcurrentHashMap,ConcurrentSkipListMap,CopyOnWriteArrayList,BlockingQueue