java并发编程——并发编程的挑战
本文是阅读《Java并发编程的艺术》后将自己记忆的理论知识和理解复写出来的产物,若有不足,欢迎指正!
java并发编程是什么?让多个线程同时处理一个任务,从而达到快速的效果。但不是所有场景都适合并发编程。并发编程的挑战有哪些呢?①并发需要对线程的调度,自然需要切换线程,这就带来了上下文切换的挑战,这里关系到中断。如何保存被中断的线程的上下文,如何选择下一个线程,如何在被中断的线程再次运行时恢复现场?如何减少上下文切换的开销?②在线程竞争资源时有何挑战?死锁③并发编程的运行速度是有上限的,受限于硬件资源和软件资源,也就是资源限制,如何解决?
一、上下文切换
上下文切换就是从一个线程切换到另一个线程的过程。
1.上下文切换的过程
出于某些原因如时间片到,正在运行的线程被中断,当前的状态会被保存,然后切换到下一个进程。
2.优点缺点
优:实现并发编程的必不可少的一部分,对更快地运行程序有积极作用。
缺:在某些情况下,上下文切换次数太多,造成更大地开销,反而不如单线程运行快。
3.如何减弱缺点的影响——减少上下文切换
(1)无锁并发编程
将数据ID用哈希算法分为多端,每段有单独线程处理
(2)CAS(CompareAndSet)
在多个线程竞争资源时,代替了锁的功能,减少了加锁解锁带来地上下文切换
(3)最少线程
避免创建不需要的线程,造成大部分线程等待的局面
(4)协程
单线程实现多任务的调度,在用户态运行
二、死锁
死锁是加锁的线程间互相等待对方释放锁内的资源的一种状态, 如何避免死锁:
(1)避免一个线程拥有多个锁
(2)避免一个线程锁内占用多个资源
(3)尝试使用定时锁
(4)数据库锁的加锁和解锁必须在同一个数据库连接里
三、资源限制
程序运行的快慢还受到硬件资源和软件资源的限制,甚至会使并发线程串行运行,这样反而比同情况下的单线程慢。硬件资源限制有:带宽的上传/下载速度,硬盘读写速度、CPU处理速度,软件资源限制有:数据库连接数、socket连接数
1.部分解决方法
(1)集群并发编程
(2)连接池
(3)根据不同资源限制调整并发度
java并发编程——并发编程的挑战相关推荐
- 《Java线程与并发编程实践》—— 2.3 谨防活跃性问题
本节书摘来异步社区<Java线程与并发编程实践>一书中的第2章,第2.3节,作者: [美]Jeff Friesen,更多章节内容可以访问云栖社区"异步社区"公众号查看. ...
- 并发编程的目的和挑战
并发编程的目的与挑战 并发编程的目的是为了让程序运行得更快.启动更多的线程并不一定就能让程序最大限度地并发执行. 希望通过多线程执行任务让程序运行得更快,会面临非常多的挑战.比如: 上下文切换的问题死 ...
- 《Java线程与并发编程实践》—— 2.6 小结
本节书摘来异步社区<Java线程与并发编程实践>一书中的第2章,第2.6节,作者: [美]Jeff Friesen,更多章节内容可以访问云栖社区"异步社区"公众号查看. ...
- Java并发编程实战_阿里P9整理分享的亿级流量Java高并发与网络编程实战PDF
前言 为了帮助初级开发者快速掌握高并发.网络编程.微服务.海量数据的处理这些实用技术,本文以"理论+范例"的形式对各个知识点进行了详细的讲解,力争让读者在实践中快速掌握相关知识. ...
- Java增强之并发编程
Java增强之并发编程 1 多线程 1.1 进程及线程 程序启动的时候,电脑会把这个程序加载到内存,在内存中需要给当前的程序分配一段的独立运行的空间,这个空间就专门负责这个程序的运行.每个应用程序运行 ...
- Java零基础并发编程入门
Java零基础并发编程入门 并发编程主要包括: 线程,同步,future,锁,fork/join, volatile,信号量,cas(原子性,可见性,顺序一致性),临界性,分布式 了解基础: JMM: ...
- java书籍_还搞不定Java多线程和并发编程面试题?你可能需要这一份书单!
点击蓝色"程序员书单"关注我哟 加个"星标",每天带你读好书! 在介绍本书单之前,我想先问一下各位读者,你们之前对于Java并发编程的了解有多少呢.经过了1 ...
- 《Java线程与并发编程实践》—— 1.2 操作更高级的线程任务
本节书摘来异步社区<Java线程与并发编程实践>一书中的第1章,第1.2节,作者: [美]Jeff Friesen,更多章节内容可以访问云栖社区"异步社区"公众号查看. ...
- 厚积薄发打卡Day26:狂神说Java之JUC并发编程<代码+笔记>(上)
前言: 学习视频来源:[狂神说Java]JUC并发编程最新版通俗易懂 一个十分优秀且励志的技术大牛+Java讲师,十分推荐他的频道:遇见狂神说
- 《Java并发编程的艺术》——Java中的并发工具类、线程池、Execute框架(笔记)
文章目录 八.Java中的并发工具类 8.1 等待多线程完成的CountDownLatch 8.2 同步屏障CyclicBarrier 8.2.1 CyclicBarrier简介 8.2.2 Cycl ...
最新文章
- 面试题准备--CSS
- UDP(首部)和TCP(首部、三次握手、四次挥手、可靠传输、滑动窗口、流量控制、拥塞控制(慢开始、拥塞避免、快重传、快恢复))
- mysql 日期对比,varchar类型装换为datetime类型
- 微信小程序unionid获取问题
- 给C#的oracle绿色版
- Python version 3.3 required, which was not found in the registry
- SharpDevelop 开发WPF教程
- iOS 越狱检测/反越狱
- 加强财务知识细节:营业利润,利润总额,净利润
- python扫码点餐系统_python3实现点餐系统
- SpringCloud-使用熔断器防止服务雪崩-Ribbon和Feign方式(附代码下载)
- unity 自动寻路
- android espresso跨程序,在Espresso Android中正确使用IdlingResource的方法
- 扁平化风格职业规划PPT模板
- 迷宫问题的求解(广度和深度优先搜索)
- jquery在线扫雷
- graphics.h头文件图形绘画详解(史上最详细)
- Python图像识别-Opencv07 异或运算,图像加密
- 菜鸡编程自学第一天-C语言
- java判断线程阻塞_记一次锁使用不当导致Dubbo线程阻塞问题