java多线程与并发(二)——初识并发编程

《Java并发编程的艺术》——笔记一

并发编程的目的是为了让程序执行的更快。

一、并发编程的挑战

1、单核处理器也支持多线程执行
2、时间片一般是几十毫秒,CPU通过不停地切换,使感觉多个线程是同时执行的

挑战一:并发执行累加操作不超过百万次时,速度比串行执行慢,因为线程有创建和上写文切换的开销

减少上下文切换的方法:
-无锁并发编程;
-CAS算法;
-使用最少线程;
-使用协程——在单线程里使用多任务的调度,并在单线程里维持多个任务见的切换。

挑战二:死锁

两个线程对两个同步对象具有循环依赖时,就会发生死锁。即同步嵌套同步。

避免死锁的常见方法:
-避免一个线程同时获取多个锁
-避免一个线程在所内同时占有多个资源,尽量保证每个锁只占用一个资源
-尝试使用定时锁,使用lock.tryLock(timeout)来代替使用内部锁机制
-数据库锁,加锁和解锁必须在一个数据库连接里,否则会出现解锁失败的情况

挑战三:资源限制的挑战

是指并发编程时,程序执行的速度受限于计算机硬件资源或软件资源。

引发的问题:因为受限于资源,增加了上下文切换和资源调度的时间,反而更慢
如何解决:对于硬件资源,考虑集群并行执行程序;对于软件资源,考虑使用资源池将资源复用

小结:
对于Java开发而言,多使用JDK并发包提供的并发容器和工具类来解决并发问题。

后面持续更新~~~~

猜你喜欢

转载自blog.csdn.net/u010843421/article/details/80816840
今日推荐