引言为什么很多大厂喜欢问并发编程呢?因为并发编程是开发人员的一个分水岭 。很多好几年开发经验的开发人员可能也没有实际的并发编程经验,要么就是在一些没有挑战性的中台实现了所谓的分布式锁,但是没有并发量去考验,要么就是笑着说其实工作中用不上,这些开发人员后面会逐渐被AI淘汰 , CURD的东西花这么多钱请你们干嘛呢?为什么不直接请个便宜的应届生呢?锻炼一两年绝对不比这些开发人员差 。因此,努力越过分水岭,往架构组件的能力出发吧 。这篇文章将会是你的出发点,这里会详细介绍JDK 的并发包的原理及使用方法 。1、JUC并发编程概述J.U.C并发包,即JAVA.util.concurrent包,是JDK的核心工具包,是JDK1.5之后,由 Doug Lea实现并引入 。
整个java.util.concurrent包,按照功能可以大致划分如下:
- juc-locks 锁框架
- juc-atomic 原子类框架
- juc-sync 同步器框架、工具类
- juc-collections 集合框架
- 进程:我们把运行中的程序叫做进程(概念) 。每个进程都会占用内存与CPU资源(动态性) 。进程与进程之间各自占用各自的内存资源 , 互相独立(独立性) 。
- 线程:线程就是进程中的一个执行单元,负责当前进程中程序的执行 。一个进程可以包含多个线程 。一个进程包含了多个线程就是多线程 。多线程可以提高程序的并行运行效率 。
为什么使用多线程?
多线程有什么用?这里举例说明:
比如看学习视频时候:我们在看视频的同时,还可以听到声音,还可以看到广告以及弹幕 , 这里至少用到四个线程,当其中一个线程卡死如放不了弹幕不影响播放广告 。
文章插图
如上图,要达到并行执行的效果 , 这里就要用到多线程 。
- 并行: 两个或两个以上的事件在同一时刻发生(同时发生)
- 并发: 两个或两个以上的事件在一个时间段内发生(交替执行)
计算机通常只有一个CPU时,在任意时刻只能执行一条计算机指令,每一个进程只有获得CPU的使用权才能执行指令 。所谓多进程并发运行,从宏观上看 , 其实是各个进程轮流获得CPU的使用权,分别执行各自的任务 。那么,就会有多个线程处于就绪状态等到CPU , JVM就负责了线程的调度 。JVM采用的是抢占式调度,没有采用分时调度,因此可能造成多线程执行结果的的随机性 。
说明:在单核CPU中 , 同一个时刻只有一个线程执行,根据CPU时间片算法依次为每个线程服务 , 这就叫线程调度 。3、多线程编程:wait()、notify()、notifyAll()目标: 线程等待和唤醒使用 。
介绍
等待和唤醒:通常是两个线程之间的事情,一个线程等待,另外一个线程负责唤醒
等待和唤醒
- wait() 等待
- notity() 唤醒单个
- notityAll() 唤醒全部
public final void wait();// 导致当前线程等待public final native void wait(long timeout) throws InterruptedException;public final native void notify();// 唤醒正在等待的单个线程public final native void notifyAll(); // 唤醒正在等待的全部线程
注意:wait和notify必须是在同步代码块中,使用锁对象调用- wait()方法的作用?
- notify()方法的作用?
- notifyAll()方法的作用?
- 为什么wait和notify方法放在Object?
- 详细介绍
推荐阅读
- “正科级”公务员退休后有多少钱?40年工龄的话,预计是这个数
- 女人对你有好感,哪怕嘴上不说,这7个肢体语言也藏不住
- “无性婚姻”有多可怕?听听3个过来人的故事,希望你能引以为戒
- 家里放了几年的红茶、绿茶、普洱茶,还能喝吗?医生告诉你实话
- 求求你们别再换脸了,就像好好的一盘菜吃出苍蝇的感觉!
- 拒认儿子巴图20年,晚年态度翻转,是居心叵测,还是真后悔?
- 教你自己制作花生酱,教你自制花生酱
- 微博该咋得才可以删除评论,为什么微博评论删除后还有显示
- 《我知道我爱你》热播:和冬天适配的偶像剧
- 李善均离世早有端倪?留下遗书后离家,现场有点燃闪电弹的痕迹