JUC并发
2021-09-08 15:22:43 21 举报
登录查看完整内容
还在完善
作者其他创作
大纲/内容
在Java中,线程部分是一个重点,本篇文章说的JUC 也是关于线程的。JUC就是java.util .concurrent工具包的简称。这是一个处理线程的工具包,JDK1.5开始出现的。
什么是JUC
线程( thread))是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,—个进程中可以并发多个线程,每条线程并行执行不同的任务。。
总结来说 线程∶系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元执行流。线程——程序执行的最小单位。·线程∶系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元执行流。线程——程序执行的最小单位。
进程与线程
NEW(新建)
RUNNABLE(准备就绪)
BLOCKED(阻塞)
WAITING(不见不善)
TIMED_WAITING(过时不候)
TERMINATED(终结)
线程的状态
( 1 ) sleep是Thread 的静态方法,wait是Object的方法,任何对象实例都能调用。
( 2 ) sleep不会释放锁,它也不需要占用锁。wait 会释放锁,但调用它的前提是当前线程占有锁(即代码要在synchronized 中)。-
( 3)它们都可以被interrupted方法中断。·
wait和sleep
串行表示所有任务都——按先后顺序进行。串行意味着必须先装完一车柴才能运送这车柴,只有运送到了,才能卸下这车柴,并且只有完成了这整个三个步骤,才能进行下一个步骤。。
并行意味着可以同时取得多个任务,并同时去执行所取得的这些任务。并行模式相当于将长长的一条队列,划分成了多条短队列,所以并行缩短了任务队列的长度。并行的效率从代码层次上强依赖于多进程/多线程代码,从硬件角度上则依赖于多核CPU。.
并发(concurrent)指的是多个程序可以同时运行的现象,更细化的是多进程可以同时运行或者多指令可以同时运行。但这不是重点,在描述并发的时候也不会去扣这种字眼是否精确,==并发的重点在于它是一种现象==,==并发描述的是多进程同时运行的现象==。但实际上,对于单核心CPU来说,同一时刻只能运行一个线程。所以,这里的\"同时运行\"表示的不是真的同一时刻有多个线程运行的现象,这是并行的概念,而是提供一种功能让用户看来多个程序同时运行起来了,但实际上这些程序中的进程不是一直霸占CPU的,而是执行一会停一会。- 要解决大并发问题,通常是将大任务分解成多个小任务,由于操作系统对进程的
并发和并行
锁是一种同步机制,保证同一个时间,只有一个线程访问被保护数据或则代码
管程(Monitor 监视器)
主线程结束了,用户线程还运行 jvm存活
用户线程:自定义线程
没有用户线程了,都是守护线程,jvm结束
守护线程:比如垃圾回收
用户线程和守护线程
线程和进程概念
1、JUC概述
修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象;。
修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象﹔·
修改一个静态的方法,其作用的范围是整个静态方法,作用的对象是这个类的所有对象
修改一个类,其作用的范围是synchronized 后面括号括起来的部分,作用主的对象是这个类的所有对象。·
Synchronized
synchronized实现售票
第一步 创建资源类,在资源类创建属性和操作方法
判断(等待线程释放锁)
干活(业务实现的地方)
通知(通知其他线程)
第二部 在资源类操作方法
第三步 创建多个线程,调用资源类的操作方法
第四步防止虚假唤醒
多线程编程步骤
Lock锁实现提供了比使用同步方法和语句可以获得的更广泛的锁操作。它们允许更灵活的结构,可能具有非常不同的属性,并且可能支持多个关联的条件对象。Lock提供了比 synchronized更多的功能。·
什么是Lock接口
继承Thread类
实现Runnable
使用Clallable接口
使用线程池
创建线程的多种方式
使用Lock实现买票例子
. Lock不是Java语言内置的,synchrogized是Java语言的关键字,因此是内置特性。Lock是一个类,通过这个类可以实现同步访问;。
Lock和synchronized有一点非常大的不同,采用synchronized不需要用户去手动释放锁,当synchronized方法或者synchronized 代码块执行完之后,系统会自动让线程释放对锁的占用;而Lock则必须要用户去手动释放锁,如果没有主动释放锁,就有可能导致出现死锁现象
synchronized线程执行发生异常,此时JVM会让线程自动释放锁。
Lock和Synchronized的区别
2、Lock接口
使用volatile关键字
虚假唤醒
wait
使用Object类的wait()和notify方法
使用JUC工具类CountDownLatch
Lock的Condition
3、线程间通信
建立标志位flag
4、线程间定制化通信
解决方案-Vector
解决方案-Collections
解决方案-CopyOnWriteArrayList
集合线程不安全演示
Hashset
解决CurrentHashMap
HashMap
5、集合的线程安全
连接
synchronized锁的八种用法
线程饿死 效率高
ReentrantLock默认的 或着false非
非公平锁
效率低但是都会有(阳光普照)
ReentrantLock(true)
公平锁
公平锁非公平锁
可重入锁
死锁
6、多线程锁
futuretask(未来任务)
7、Callable接口
减少计数CountDownLatch
循环栅栏CyclicBarrier
信号灯Semaphore
8、JUC强大的辅助类
9、ReentrantReadWriteLock读写锁
10、BlockingQueue阻塞队列
11、ThreadPool线程池
12、Fork/Join分支合并框架
13、CompletableFuture异步回调
JUC高并发
0 条评论
回复 删除
下一页