Java并发包小结

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,只有到期后才返回。

待补充...

点赞
收藏

评论区

加载中...

相关推荐

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

notifyAll唤醒线程的范围?

今天看到开源中国上有这样一个问答:假设我有两个对象锁,对象A锁有5个线程在等待,对象B锁有3个线程在等待,对象A锁中的线程执行完,这时调用notifyAll,是唤醒了对象AB两个锁的全部的等待线程还是只唤醒了A锁的5个线程?1.方法文档解释通过看该方法文档的解释,可以得出下面结论:notifyAll()中All的含义是所有的线程,而不是所有的锁,只能唤

java中的锁

记录一下公平锁,非公平锁,可重入锁(递归锁),读写锁,自旋锁的概念,以及一些和锁有关的java类。公平锁与非公平锁:公平锁就是在多线程环境下,每个线程在获取锁时,先查看这个锁维护的队列,如果队列为空或者自身就是等待队列的第一个,就占有锁。否则就加入到等待队列中,按照FIFO的顺序依次占有锁。非公平锁会一上来就试图占

Java的编程逻辑

1、run()和start()的区别2、线程的基本属性和方法1.id:一个递增的整数,每创建一个线程就加一2.name3.优先级:从1到10,默认为5,会映射到系统中的优先级。数字越大,要优先级越高4.状态: NEW:还没调用start RUNABLE:正在执行run或者正在等待cup分配

Python的锁

互斥锁锁通常被用来实现对共享资源的同步访问。为每一个共享资源创建一个Lock对象,lLock()创建一个锁,初始状态是未锁定当你需要访问该资源时,调用l.acquire方法来获取锁对象(如果其它线程已经获得了该锁,则当前线程需等待其被释放),待资源访问完后,再调用l.release方法释放锁!(https:

AQS之工作原理

前面一章LZ简单的介绍了下AbstractQueuedSynchronizer(AQS)以及AQS中提供的一些模板方法和作用,这一章LZ将用一个简单的实例来介绍下AQS中独占锁的工作原理。独占锁顾名思义就是在同一时刻只能有一个线程能获取到锁,而其它需要获取这把锁的线程将进入到同步队列中等待获取到了锁的线程释放这把锁,只有获取锁的线程释放了锁,同步队列中的线程