Java并发包小结

Wesley13
• 阅读 392

1、Lock

    Lock功能对应关键字synchrozied功能,lock和unlock方法用于加锁和释放锁。等待锁的线程加入到等待链表中,同时阻塞线程,锁释放时,从等待链表中取出等待的线程执行,取等待的线程分公平与非公平两种方式,公平方式取第一个等待的线程,非公平方式当前正在获取锁的线程可能立刻执行,而不用加入到等待队列中,排队执行。

2、Condition

    Condition的await和singal方法对应Object的wait和notify方法,JDK中阻塞队列使用Condition实现,使用两个Condition对象,分别是notFull和notEmpty,协调阻塞集合的存取操作。

3、LinkedBlockQueue  ArrayBlockQueue

    LinkedBlockQueue基于链表实现,不用一开始就分配一块空闲的内存空间,因此适合用于不确定集合大小的情况,避免预先分配内存,初始化时可以不指定队列大小,默认为Integer.MAX_VALUE,指定大小后不可以扩容。

    ArrayBlockQueue基于数组实现,构造参数至少有初始容量这个参数,指定容量后不可扩容,同时会预先分配内存空间。

4、DelayQueue

    DelayQueue用于把需要延迟处理的数据存放到集合中,比如订单超时后取消订单,不用定时任务定时轮询。业务线程把延迟数据添加到DelayQueue中,另外一个线程从队列中poll数据,如果数据时间没有到期,返回Null,只有到期后才返回。

待补充...

点赞
收藏
评论区
推荐文章
技术小男生 技术小男生
4个月前
linux环境jdk环境变量配置
1:编辑系统配置文件vi/etc/profile2:按字母键i进入编辑模式,在最底部添加内容:JAVAHOME/opt/jdk1.8.0152CLASSPATH.:$JAVAHOME/lib/dt.jar:$JAVAHOME/lib/tools.jarPATH$JAVAHOME/bin:$PATH3:生效配置
光头强的博客 光头强的博客
4个月前
Java面向对象试题
1、请创建一个Animal动物类,要求有方法eat()方法,方法输出一条语句“吃东西”。创建一个接口A,接口里有一个抽象方法fly()。创建一个Bird类继承Animal类并实现接口A里的方法输出一条有语句“鸟儿飞翔”,重写eat()方法输出一条语句“鸟儿吃虫”。在Test类中向上转型创建b对象,调用eat方法。然后向下转型调用eat()方
执键写春秋 执键写春秋
1年前
notifyAll唤醒线程的范围?
今天看到开源中国上有这样一个问答:假设我有两个对象锁,对象A锁有5个线程在等待,对象B锁有3个线程在等待,对象A锁中的线程执行完,这时调用notifyAll,是唤醒了对象AB两个锁的全部的等待线程还是只唤醒了A锁的5个线程?1.方法文档解释通过看该方法文档的解释,可以得出下面结论:notifyAll()中All的含义是所有的线程,而不是所有的锁,只能唤
Wesley13 Wesley13
1年前
Java的编程逻辑
1、run()和start()的区别2、线程的基本属性和方法1.id:一个递增的整数,每创建一个线程就加一2.name3.优先级:从1到10,默认为5,会映射到系统中的优先级。数字越大,要优先级越高4.状态: NEW:还没调用start RUNABLE:正在执行run或者正在等待cup分配
Wesley13 Wesley13
1年前
Java并发源码之ReentrantLock
ReentrantLock介绍ReentrantLock是一个可重入的互斥锁,与使用synchronized方法和语句访问的隐式监视锁具有相同的基本行为和语义,但具有扩展功能。ReentrantLock属于最后一个成功加锁并且还没有释放锁的线程。当一个线程请求lock时,如果锁不属于任何线程,将立马得到这个锁;如果锁已经被
Wesley13 Wesley13
1年前
java中的锁
记录一下公平锁,非公平锁,可重入锁(递归锁),读写锁,自旋锁的概念,以及一些和锁有关的java类。公平锁与非公平锁:公平锁就是在多线程环境下,每个线程在获取锁时,先查看这个锁维护的队列,如果队列为空或者自身就是等待队列的第一个,就占有锁。否则就加入到等待队列中,按照FIFO的顺序依次占有锁。非公平锁会一上来就试图占
Stella981 Stella981
1年前
ReentrantLock源码——获取公平锁、非公平锁、释放锁
一般用ReentrantLock的方式如下://新建非公平锁实例LocklocknewReentrantLock();//新建非公平锁实例//LocklocknewReentrantLock(true);//加锁lock.lock();try{
Wesley13 Wesley13
1年前
JDK里的自旋锁
自旋锁是采用让当前线程不停地的在循环体内执行实现的,当循环的条件被其他线程改变时才能进入临界区。JDK里面自旋锁的实现有SynchronousQueue 和LinkedTransferQueue。 本文只是自己对源码的简单理解。先说公平锁,先等待的线程先获得数据。SynchronousQueue的内部类TransferQueue实现了公平锁。
Wesley13 Wesley13
1年前
Java 并发编程:AQS 的公平性
所谓公平是指所有线程对临界资源申请访问权限的成功率都一样,它不会让某些线程拥有优先权。通过几篇文章的分析我们知道了JDK的AQS的锁是基于CLH锁进行优化的,而其中使用了FIFO队列,也就是说等待队列是一个先进先出的队列。那是否就可以说每条线程获取锁时就是公平的呢?关于公平性,严格来说应该分成三个点来看:入队阶段、唤醒阶段以及闯入策略。友情链接:
Wesley13 Wesley13
1年前
Java并发编程之锁的活跃性问题
引子在安全性和活跃性之间通常存在一种制衡。当我们使用锁来保证线程的安全的同时,如果过度使用加锁,可能会导致死锁。应用无法从死锁中恢复过来,所以在设计时一定要避免会排除这些可能会出现的活跃性问题。死锁死锁描述了这样一种情景,两个或多个线程永久阻塞,互相等待对方释放资源如果线程1锁住了A,然后尝试对B进行加锁,同