一、JUC是什么?
java.util.concurrent在并发编程中使用的工具类
进程/线程回顾
1、进程/线程是什么?
进程:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。
线程:通常在一个进程中可以包含若干个线程,当然一个进程中至少有一个线程,不然没有存在的意义。线程可以利用进程所拥有的资源,在引入线程的操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位,由于线程比进程更小,基本上不拥有系统资源,故对它的调度所付出的开销就会小得多,能更高效的提高系统多个程序间并发执行的程度。
2、进程/线程的例子?
使用 QQ ,查看进程一定有一个 QQ.exe 的进程,我可以用 qq 和 A 文字聊天,和 B 视频聊天,给 C 传文件,给 D 发一段语言, QQ 支持录入信息的搜索。
大四的时候写论文,用 word 写论文,同时用 QQ 音乐放音乐,同时用 QQ 聊天,多个进程。
word 如没有保存,停电关机,再通电后打开 word 可以恢复之前未保存的文档, word 也会检查你的拼写,两个线程:容灾备份,语法检查
3、线程状态?
Thread.State public enum State { /** * Thread state for a thread which has not yet started. */ NEW ,(新建) /** * Thread state for a runnable thread. A thread in the runnable * state is executing in the Java virtual machine but it may * be waiting for other resources from the operating system * such as processor. */ RUNNABLE ,(准备就绪) /** * Thread state for a thread blocked waiting for a monitor lock. * A thread in the blocked state is waiting for a monitor lock * to enter a synchronized block/method or * reenter a synchronized block/method after calling * { @link Object#wait() Object.wait}. */ BLOCKED ,(阻塞) /** * Thread state for a waiting thread. * A thread is in the waiting state due to calling one of the * following methods: * <ul> * <li> { @link Object#wait() Object.wait} with no timeout </li> * <li> { @link #join() Thread.join} with no timeout </li> * <li> { @link LockSupport#park() LockSupport.park} </li> * </ul> * * <p> A thread in the waiting state is waiting for another thread to * perform a particular action. * * For example, a thread that has called <tt> Object.wait() </tt> * on an object is waiting for another thread to call * <tt> Object.notify() </tt> or <tt> Object.notifyAll() </tt> on * that object. A thread that has called <tt> Thread.join() </tt> * is waiting for a specified thread to terminate. */ WAITING ,(不见不散) /** * Thread state for a waiting thread with a specified waiting time. * A thread is in the timed waiting state due to calling one of * the following methods with a specified positive waiting time: * <ul> * <li> { @link #sleep Thread.sleep} </li> * <li> { @link Object#wait(long) Object.wait} with timeout </li> * <li> { @link #join(long) Thread.join} with timeout </li> * <li> { @link LockSupport#parkNanos LockSupport.parkNanos} </li> * <li> { @link LockSupport#parkUntil LockSupport.parkUntil} </li> * </ul> */ TIMED_WAITING ,(过时不候) /** * Thread state for a terminated thread. * The thread has completed execution. */ TERMINATED ;(终结) }
线程的状态
NEW :新建一个线程
RUNNABLE:准备就绪
BLOCKED:阻塞
WAITING:死等
TIMED_WAITING:过时不候
TERMINATED:终结者
4、wait/sleep区别?
wait/sleep
功能都是当前线程暂停,有什么区别?
wait放开手去睡,放开手里的锁sleep握紧手去睡,醒了手里还有锁
5、什么是并发?什么是并行?
并发:同一时刻多个线程在访问同一个资源,多个线程对一个点 例子:小米9今天上午10点,限量抢购
春运抢票 电商秒杀...
并行:多项工作一起执行,之后再汇总 例子:泡方便面,电水壶烧水,一边撕调料倒入桶中