JUC探险-1、初识概貌

18 篇文章 0 订阅

一、JUC相关知识:

  ①什么是JUC?

    在 Java 5.0 提供了 java.util.concurrent(简称JUC)包。在此包中增加了在并发编程中很常用的工具类,用于定义类似于线程的自定义子系统,包括线程池、异步 IO 和轻量级任务框架,还提供了设计用于多线程上下文中的 Collection 实现等。

  ②并发编程的意义

    1、并发编程的优点

      ⅰ.通过并发编程的形式可以将多核CPU的计算能力发挥到极致,性能得到提升。
      ⅱ.面对复杂业务模型,并行程序会比串行程序更适应业务需求,而并发编程更能吻合业务拆分

    2、并发编程的缺点

      ⅰ.频繁的上下文切换,非常损耗性能。

      解决方案:无锁并发编程CAS算法使用最少线程协程等。

      ⅱ.线程安全问题。

      多线程编程中最难以把握的就是临界区线程安全问题,稍微不注意就会出现死锁的情况,一旦产生死锁就会造成系统功能不可用。
      解决方案:
        ⒈避免一个线程同时获得多个锁。
        ⒉避免一个线程在锁内部占有多个资源,尽量保证每个锁只占用一个资源。
        ⒊尝试使用定时锁,使用lock.tryLock(timeOut),当超时等待时当前线程不会阻塞。
        ⒋对于数据库锁,加锁和解锁必须在一个数据库连接里,否则会出现解锁失败的情况。

      ⅲ.过多的线程可能造成内存不足的问题。

      解决方案:合理使用线程池。

      ⅳ.可能造成某个操作无法向下运行,比如饥饿问题。

  ③并发的一些相关概念

    1、同步和异步

      同步方法调用一开始,调用者必须等待被调用的方法结束后,调用者后面的代码才能执行。
      异步调用开始后,调用者不用管被调用方法是否完成,都会继续执行后面的代码,当被调用的方法完成后会通知调用者。

    2、并发和并行

      并发指的是多个任务交替进行,而并行则是指真正意义上的“同时进行”。
      实际上,如果系统内只有一个CPU,而使用多线程时,那么真实系统环境下不能并行,只能通过切换时间片的方式交替进行,而成为并发执行任务。真正的并行也只能出现在拥有多个CPU的系统中。

    3、阻塞和非阻塞

      阻塞和非阻塞通常用来形容多线程间的相互影响。
      比如一个线程占有了临界区资源,那么其他线程需要这个资源就必须进行等待该资源的释放,会导致等待的线程挂起,这种情况就是阻塞;而非阻塞就恰好相反,它强调没有一个线程可以阻塞其他线程,所有的线程都会尝试地往前运行。

    4、临界区

      临界区用来表示一种公共资源或者说是共享数据,可以被多个线程使用。但是每个线程使用时,一旦临界区资源被一个线程占有,那么其他线程必须等待。


二、JUC包结构:

  ①JUC包内容

    翻看源码,第一眼看到的就是包结构:atomic和locks子包,还有很多类文件。根据功能大致划分,结果如下图所示:

  ②代码层次结构

  ③各模块详细内容

    1、atomic

    2、locks

    3、collections

    4、threadPool相关

    5、tools

系列文章传送门:

JUC探险-1、初识概貌
JUC探险-2、synchronized
JUC探险-3、volatile
JUC探险-4、final
JUC探险-5、原子类
JUC探险-6、Lock & AQS
JUC探险-7、ReentrantLock
JUC探险-8、ReentrantReadWriteLock
JUC探险-9、Condition
JUC探险-10、常见工具、数据结构
JUC探险-11、ConcurrentHashMap
JUC探险-12、CopyOnWriteArrayList
JUC探险-13、ConcurrentLinkedQueue
JUC探险-14、ConcurrentSkipListMap
JUC探险-15、BlockingQueue
JUC探险-16、ThreadLocal
JUC探险-17、线程池

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值