<ol><li><span style="font-size: inherit;">什么是JUC</span></li></ol>
在Java中,线程部分是一个重点,本篇文章说的JUC 也是关于线程的。JUC就是java.util .concurrent工具包的简称。这是一个处理线程的工具包,JDK1.5开始出现的。
线程和进程概念
进程与线程
进程(Process )是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。程序是指令、数据及其组织形式的描述,进程是程序的实体。,<br>
线程( thread))是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,—个进程中可以并发多个线程,每条线程并行执行不同的任务。。<br>
<ul><li>总结来说 线程∶系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元执行流。线程——程序执行的最小单位。·线程∶系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元执行流。线程——程序执行的最小单位。</li></ul>
线程的状态
NEW(新建)
RUNNABLE(准备就绪)
BLOCKED(阻塞)
WAITING(不见不善)
TIMED_WAITING(过时不候)
TERMINATED(终结)
wait和sleep
( 1 ) sleep是Thread 的静态方法,wait是Object的方法,任何对象实例都能调用。
( 2 ) sleep不会释放锁,它也不需要占用锁。wait 会释放锁,但调用它的前提是当前线程占有锁(即代码要在synchronized 中)。-
( 3)它们都可以被interrupted方法中断。·
并发和并行
串行表示所有任务都——按先后顺序进行。串行意味着必须先装完一车柴才能运送这车柴,只有运送到了,才能卸下这车柴,并且只有完成了这整个三个步骤,才能进行下一个步骤。。
并行意味着可以同时取得多个任务,并同时去执行所取得的这些任务。并行模式相当于将长长的一条队列,划分成了多条短队列,所以并行缩短了任务队列的长度。并行的效率从代码层次上强依赖于多进程/多线程代码,从硬件角度上则依赖于多核CPU。.<br>
并发(concurrent)指的是多个程序可以同时运行的现象,更细化的是多进程可以同时运行或者多指令可以同时运行。但这不是重点,在描述并发的时候也不会去扣这种字眼是否精确,==并发的重点在于它是一种现象==,==并发描述的是多进程同时运行的现象==。但实际上,对于单核心CPU来说,同一时刻只能运行一个线程。所以,这里的"同时运行"表示的不是真的同一时刻有多个线程运行的现象,这是并行的概念,而是提供一种功能让用户看来多个程序同时运行起来了,但实际上这些程序中的进程不是一直霸占CPU的,而是执行一会停一会。- 要解决大并发问题,通常是将大任务分解成多个小任务,由于操作系统对进程的
总结: <br>并发:同一时刻多个线程在访问同一个资源,多个线程对一个点·<br> 例子∶春运抢票电商秒杀....<br>并行:多项工作一起执行,之后再汇总,<br> 例子:泡方便面,电水壶烧水,一边撕调料倒入桶中。<br>补充:并发是把任务在不同的时间点交给处理器处理。不一定在同一个时间点处理,cpu来回切换执行<br>并行则是两个或两个以上的同时发生(执行)<br>并发:是有处理多个任务的能力,不一定同时。在短时间内轮流处理多个任务的能力<br>并行:则是同时处理多个任务的能力<br><b>在单个cpu中并发是间隔执行,但是在多核cpu中并发,可以分配到不同的程序执行,实现并行也就是同时执行<br></b>并发在一定条件下(多CPU操作系统)可以部分事件并行执行<b><br></b>
管程(Monitor 监视器)
锁<br>是一种同步机制,保证同一个时间,只有一个线程访问被保护数据或则代码
用户线程和守护线程
用户线程:自定义线程
主线程结束了,用户线程还运行 jvm存活
守护线程:比如垃圾回收
没有用户线程了,都是守护线程,jvm结束