多线程
文章平均质量分 79
cully#
这个作者很懒,什么都没留下…
展开
-
线程池工作
线程池实现原理当向线程池提交一个任务之后,线程池的处理流程如下:1、判断是否达到核心线程数,若未达到,则直接创建新的线程处理当前传入的任务,否则进入下个流程2、线程池中的工作队列是否已满,若未满,则将任务丢入工作队列中先存着等待处理,否则进入下个流程3、是否达到最大线程数,若未达到,则创建新的线程处理当前传入的任务,否则交给线程池中的饱和策略进行处理。流程图如下:线程池的构造方法实现类是:java.util.concurrent.ThreadPoolExecutor,主要构造方法: pub原创 2020-06-08 17:25:44 · 146 阅读 · 0 评论 -
JUC中等待多线程完成的工具类CountDownLatch
CountDownLatch介绍CountDownLatch称之为闭锁,它可以使一个或一批线程在闭锁上等待,等到其他线程执行完相应操作后,闭锁打开,这些等待的线程才可以继续执行。确切的说,闭锁在内部维护了一个倒计数器。通过该计数器的值来决定闭锁的状态,从而决定是否允许等待的线程继续执行。常用方法:public CountDownLatch(int count):构造方法,count表示计数器的值,不能小于0,否者会报异常。**public void await() throws Interrupte原创 2020-06-02 22:07:56 · 151 阅读 · 0 评论 -
JUC中的Semaphore(信号量)-限流
synchronized和重入锁ReentrantLock,这2种锁一次都只能允许一个线程访问一个资源,而信号量可以控制有多少个线程可以访问特定的资源Semaphore常用场景:限流看过一个大佬写过的例子:比如有个停车场,有5个空位,门口有个门卫,手中5把钥匙分别对应5个车位上面的锁,来一辆车,门卫会给司机一把钥匙,然后进去找到对应的车位停下来,出去的时候司机将钥匙归还给门卫。停车场生意比较好,同时来了100两车,门卫手中只有5把钥匙,同时只能放5辆车进入,其他车只能等待,等有人将钥匙归还给门卫之后,原创 2020-06-01 11:19:31 · 300 阅读 · 0 评论 -
JUC中condition的使用、以及LockSupport工具类的使用
Object的wait和notify/notify是与对象监视器配合完成线程间的等待/通知机制**,而Condition与Lock配合完成等待通知机制**,前者是java底层级别的,后者是语言级别的,具有更高的可控制性和扩展性。使用规则:Condition由ReentrantLock对象创建,并且可以同时创建多个,Condition接口在使用前必须先调用ReentrantLock的lock()方法获得锁,之后调用Condition接口的await()将释放锁,并且在该Condition上等待,直到有其他原创 2020-05-31 00:46:25 · 131 阅读 · 0 评论 -
java中synchronized获取锁和ReentrantLock
synchronized的局限性synchronized是java内置的关键字,synchronized对同步锁的获取和释放锁由jvm实现,开发无法控制,可以认为是越底层的东西越高级越无法控制。所以使用synchronized同步的情景例如:1、当线程尝试获取锁的时候,如果获取不到锁会一直阻塞,这个阻塞的过程,用户无法控制2、如果获取锁的线程进入休眠或者阻塞,除非当前线程异常,否则其他线程尝试获取锁必须一直等待ReentrantLock也可以同步方法,加锁一般ReentrantLock的使用过原创 2020-05-28 00:19:37 · 329 阅读 · 0 评论 -
线程组,守护线程,用户线程的简单了解
线程组使用线程组可以方便管理线程 ThreadGroup threadGroup = new ThreadGroup("threadGroup_1");//创建一个线程组 Thread t1 = new Thread(threadGroup, new MyThtead(),"t1");//创建线程并将其命名加入线程组为线程组添加一个父线程ThreadGroup threadGroup2 = new ThreadGroup(threadGroup,"threadGroup_2");原创 2020-05-26 18:13:47 · 158 阅读 · 0 评论 -
volatile与Java内存模型、同步方法的使用synchronized关键字
本文中的模型是一位大佬画的,我借用一下java内存模型(JMM),Java线程之间的通信由Java内存模型(本文简称为JMM)控制,JMM决定一个线程对共享变量的写入何时对另一个线程可见。从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存(main memory)中,每个线程都有一个私有的本地内存(local memory),本地内存中存储了该线程以读/写共享变量的副本。本地内存是JMM的一个抽象概念,并不真实存在。它涵盖了缓存,写缓冲区,寄存器以及其他的硬件和编译器原创 2020-05-26 00:00:50 · 100 阅读 · 0 评论 -
线程中部分方法的整理
等待(wait)和通知(notify)这两个方法都是Object 类的方法,用于多线程 ,必须用在synchronize语句中,比如在线程A中,调用了obj.wait()方法,那么线程A就会停止继续执行(释放锁),转为等待状态,线程A会一直等到其他线程调用obj.notify()方法为止。在多线程中,,因为系统可能运行多个线程同时等待某一个对象。当object.notify()方法被调用时,它就会从这个队列中随机选择一个线程,并将其唤醒。并不是谁先等待就谁先唤醒除notify()方法外,Object独原创 2020-05-25 23:33:25 · 86 阅读 · 0 评论