java并发包学习系列:概论

#为什么要学习并发

“今天和一哥们聊天,聊着聊着聊到钱的方面,当时我就说,全世界60亿人,要是每人给我一块钱那不就发财了啊.哥们立马用鄙视的眼神看我,全世界60亿人,平均一人给你钱需要2秒,也就是120亿秒,2亿分钟,330多万个小时,14万天,380年.恭喜你,过380年之后你就是亿万富翁,lz当时竟然无言以对。。”

  并发在海量任务处理时有非常的明显优势,如果是串行的执行海量任务,那时间就是累加的关系,但是如果采用并发设计,就相当于同时执行了多个任务,这样可以大幅提高任务的执行速度。如上的例子,如果采用并发的设计,完全不必等这么久。

#并发的应用场景

1.比如构建大流量高并发的网站:https://www.zhihu.com/question/19809311
2.构建一个支持大量接入的即时通讯服务端。
3.在android构建一个支持大量请求的网络请求框架。
4.双11,天猫的交易系统等等。涉及大量的请求,如果不使用并发,而是串行,效能会非常非常的低。
5.各种生产者消费者模型对应的业务场景等等

#jdk并发包具体结构(转载)

一、描述线程的类:Runable和Thread都属于java.lang包
二、内置锁synchronized属于jvm关键字,内置条件队列操作接口Object.wait()/notify()/notifyAll()属于java.lang包
三、提供内存可见性和防止指令重排的volatile属于jvm关键字
四、而java.util.concurrent包(J.U.C)中包含的是java并发编程中有用的一些工具类,包括几个部分:
1、locks部分:包含在java.util.concurrent.locks包中,提供显式锁(互斥锁和速写锁)相关功能;
2、atomic部分:包含在java.util.concurrent.atomic包中,提供原子变量类相关的功能,是构建非阻塞算法的基础;
3、executor部分:散落在java.util.concurrent包中,提供线程池相关的功能;
4、collections部分:散落在java.util.concurrent包中,提供并发容器相关功能;
5、tools部分:散落在java.util.concurrent包中,提供同步工具类,如信号量、闭锁、栅栏等功能;

在这里插入图片描述

#学习java并发必知的几个概念

##同步和异步

同步方法调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为。

异步方法调用更像是一个消息传递,一旦开始,方法调用就会立即返回,调用者就可以继续后续的操作。而异步方法通常会在另外一个线程中执行。

##临界区

临界区用来表示一种公共资源或者说是共享数据,可以被多个线程使用。但是每一次,只能有一个线程使用它,一旦临界区资源被占用,其他线程要想使用这个资源,就必须等待。

##阻塞和非阻塞

阻塞和非阻塞常用来形容多线程间的相互影响。

##死锁、饥饿、活锁

易理解

  大学的时候,我们都学习过《操作系统》,里面也讲到了线程、信号量等等,有了这些知识,对本系列的内容理解起来会更容易一些,这个系列相当于只是采用了java语言来阐释大学的内容。

  针对具体业务建模,写出优秀的工业级并发代码,是一件非常困难的事情,这里也只是简单的介绍一些基础的知识。后续还要在工作中深入学习。

让我们开启java并发包的学习吧~~~~~~~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值