0、Java并发包系列开篇

在我们想要谈论Java并发包(java.util.concurrent)的时候,这是一个头疼的问题,却又是每个Java工程师不得不掌握的一项技能。一直以来都想写一个Java并发包系列,无奈迟迟没有动手动脑。最近重新思考规划了自己的学习路线,决定从Java并发包开始把每个技术、原理、源码做成一个一个系列,由浅入深,由表及里。

这是Java并发包的开篇,我讲大致介绍一个较为宏观的角度来窥探Java并发包,以及这个系列的一些大致思路。

java.uti.concurrent从jdk1.5开始新加入的一个包,致力于解决并发编程的线程安全问题,使用户能够更为快捷方便的编写多线程情况下的并发程序。谈到线程安全问题总会免不了几个核心问题:锁、阻塞、原子性、可见性等等。

-java.util.concurrent
 -atomic
 -locks 
 …

在concurrent包下还有两个子包,一个是atomic这里面放置的是一些原子类,比如在多线程环境下执行i++的操作,实际上是i+1再是将结果赋值给i,这里就会涉及到一个线程安全的问题,当一个线程正在执行i+1的时候,很有可能另外一个线程正在读取i的值,这个时候就会造成数据不一致,这是原子性的问题。即使一个线程完成了i++的操作,而另外一个线程此时来读取i的值也有可能发现i并不是相加后的值,这是可见性的问题。atomic里的AtomInteger就能完美解决原子性和可见性的问题。

另一个包是locks,这里面的包可以说是提供了并发包里线程安全的最为基础的工具-显示锁(ReentrantLock、ReadWriteLock)。Java中有synchronized修饰的同步代码块内置锁,但这远远不能满足一些高级特性,例如通过轮询、定时的方式去获得一个锁,并发包的显示锁的灵活性要高于synchronized,但随之而来的是使用的难度会增加,使用不当则会造成未知的后果。

concurrent包下就是一些并发工具包,常见的有ConcurrentHashMap、ArrayLinkedQueue、LinkedBlockingQueue...这些都是线程安全的类,根据情况不同选取不同的类。

在这个系列的开始,我会首先介绍有关线程的一些基础知识以及专业术语,例如:线程与进程、阻塞与非阻塞、线程安全、原子性、可见性等等,有时候可能会“超纲”,超纲部分做简单简述。接着会从实例出发分门别类的介绍并发包以及源码,源码以jdk1.7为主,又是可能会设自己最新的jdk1.8甚至jdk1.6,这会特殊表明。最后会对Java并发包做一个总结性的概述。

转载于:https://my.oschina.net/waterfu/blog/1975967

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值