本文是阅读《Java并发编程的艺术》后将自己记忆的理论知识和理解复写出来的产物,若有不足,欢迎指正!

java并发编程是什么?让多个线程同时处理一个任务,从而达到快速的效果。但不是所有场景都适合并发编程。并发编程的挑战有哪些呢?①并发需要对线程的调度,自然需要切换线程,这就带来了上下文切换的挑战,这里关系到中断。如何保存被中断的线程的上下文,如何选择下一个线程,如何在被中断的线程再次运行时恢复现场?如何减少上下文切换的开销?②在线程竞争资源时有何挑战?死锁③并发编程的运行速度是有上限的,受限于硬件资源和软件资源,也就是资源限制,如何解决?

一、上下文切换

上下文切换就是从一个线程切换到另一个线程的过程。

1.上下文切换的过程

出于某些原因如时间片到,正在运行的线程被中断,当前的状态会被保存,然后切换到下一个进程。

2.优点缺点

优:实现并发编程的必不可少的一部分,对更快地运行程序有积极作用。

缺:在某些情况下,上下文切换次数太多,造成更大地开销,反而不如单线程运行快。

3.如何减弱缺点的影响——减少上下文切换

(1)无锁并发编程

将数据ID用哈希算法分为多端,每段有单独线程处理

(2)CAS(CompareAndSet)

在多个线程竞争资源时,代替了锁的功能,减少了加锁解锁带来地上下文切换

(3)最少线程

避免创建不需要的线程,造成大部分线程等待的局面

(4)协程

单线程实现多任务的调度,在用户态运行

二、死锁

死锁是加锁的线程间互相等待对方释放锁内的资源的一种状态, 如何避免死锁:

(1)避免一个线程拥有多个锁

(2)避免一个线程锁内占用多个资源

(3)尝试使用定时锁

(4)数据库锁的加锁和解锁必须在同一个数据库连接里

三、资源限制

程序运行的快慢还受到硬件资源和软件资源的限制,甚至会使并发线程串行运行,这样反而比同情况下的单线程慢。硬件资源限制有:带宽的上传/下载速度,硬盘读写速度、CPU处理速度,软件资源限制有:数据库连接数、socket连接数

1.部分解决方法

(1)集群并发编程

(2)连接池

(3)根据不同资源限制调整并发度

java并发编程——并发编程的挑战相关推荐

  1. 《Java线程与并发编程实践》—— 2.3 谨防活跃性问题

    本节书摘来异步社区<Java线程与并发编程实践>一书中的第2章,第2.3节,作者: [美]Jeff Friesen,更多章节内容可以访问云栖社区"异步社区"公众号查看. ...

  2. 并发编程的目的和挑战

    并发编程的目的与挑战 并发编程的目的是为了让程序运行得更快.启动更多的线程并不一定就能让程序最大限度地并发执行. 希望通过多线程执行任务让程序运行得更快,会面临非常多的挑战.比如: 上下文切换的问题死 ...

  3. 《Java线程与并发编程实践》—— 2.6 小结

    本节书摘来异步社区<Java线程与并发编程实践>一书中的第2章,第2.6节,作者: [美]Jeff Friesen,更多章节内容可以访问云栖社区"异步社区"公众号查看. ...

  4. Java并发编程实战_阿里P9整理分享的亿级流量Java高并发与网络编程实战PDF

    前言 为了帮助初级开发者快速掌握高并发.网络编程.微服务.海量数据的处理这些实用技术,本文以"理论+范例"的形式对各个知识点进行了详细的讲解,力争让读者在实践中快速掌握相关知识. ...

  5. Java增强之并发编程

    Java增强之并发编程 1 多线程 1.1 进程及线程 程序启动的时候,电脑会把这个程序加载到内存,在内存中需要给当前的程序分配一段的独立运行的空间,这个空间就专门负责这个程序的运行.每个应用程序运行 ...

  6. Java零基础并发编程入门

    Java零基础并发编程入门 并发编程主要包括: 线程,同步,future,锁,fork/join, volatile,信号量,cas(原子性,可见性,顺序一致性),临界性,分布式 了解基础: JMM: ...

  7. java书籍_还搞不定Java多线程和并发编程面试题?你可能需要这一份书单!

    点击蓝色"程序员书单"关注我哟 加个"星标",每天带你读好书! ​ 在介绍本书单之前,我想先问一下各位读者,你们之前对于Java并发编程的了解有多少呢.经过了1 ...

  8. 《Java线程与并发编程实践》—— 1.2 操作更高级的线程任务

    本节书摘来异步社区<Java线程与并发编程实践>一书中的第1章,第1.2节,作者: [美]Jeff Friesen,更多章节内容可以访问云栖社区"异步社区"公众号查看. ...

  9. 厚积薄发打卡Day26:狂神说Java之JUC并发编程<代码+笔记>(上)

    前言: 学习视频来源:[狂神说Java]JUC并发编程最新版通俗易懂 一个十分优秀且励志的技术大牛+Java讲师,十分推荐他的频道:遇见狂神说

  10. 《Java并发编程的艺术》——Java中的并发工具类、线程池、Execute框架(笔记)

    文章目录 八.Java中的并发工具类 8.1 等待多线程完成的CountDownLatch 8.2 同步屏障CyclicBarrier 8.2.1 CyclicBarrier简介 8.2.2 Cycl ...

最新文章

  1. 面试题准备--CSS
  2. UDP(首部)和TCP(首部、三次握手、四次挥手、可靠传输、滑动窗口、流量控制、拥塞控制(慢开始、拥塞避免、快重传、快恢复))
  3. mysql 日期对比,varchar类型装换为datetime类型
  4. 微信小程序unionid获取问题
  5. 给C#的oracle绿色版
  6. Python version 3.3 required, which was not found in the registry
  7. SharpDevelop 开发WPF教程
  8. iOS 越狱检测/反越狱
  9. 加强财务知识细节:营业利润,利润总额,净利润
  10. python扫码点餐系统_python3实现点餐系统
  11. SpringCloud-使用熔断器防止服务雪崩-Ribbon和Feign方式(附代码下载)
  12. unity 自动寻路
  13. android espresso跨程序,在Espresso Android中正确使用IdlingResource的方法
  14. 扁平化风格职业规划PPT模板
  15. 迷宫问题的求解(广度和深度优先搜索)
  16. jquery在线扫雷
  17. graphics.h头文件图形绘画详解(史上最详细)
  18. Python图像识别-Opencv07 异或运算,图像加密
  19. 菜鸡编程自学第一天-C语言
  20. java判断线程阻塞_记一次锁使用不当导致Dubbo线程阻塞问题

热门文章

  1. 英文pdf文件的翻译问题
  2. 理解java中的反射
  3. JAVA——jdk8的下载与安装,win10下配置JDK环境变量
  4. 线性布局管理器LinearLayout
  5. maven获取所有依赖项
  6. osgEarth示例分析——osgearth_annotation
  7. python实现百度新闻爬取并存入数据库(二)
  8. 设置单选框只能选择一个
  9. 一个强化学习 Q-learning 算法的简明教程
  10. Gstreamer说明