Java并发编程
不会游泳的小青龙
这个作者很懒,什么都没留下…
展开
-
Java并发编程(七)——Java中的线程池
线程池的实现原理(1)线程判断核心线程池里的线程是否都在执行任务。如果不是,则创建一个新的工作线程来执行任务。如果核心线程池里的线程都在执行任务,则进入下个流程。(2)线程池判断工作队列是否已满。如果工作队列没有满,则将新提交的任务存储在这个工作队列里。如果工作队列满了,则进入下个流程。(3)线程池判断线程池的线程是否都处于工作状态。如果没有,则创建一个新的工作线程来执行任务。如果已经满了,则交给饱和策略来处理这个任务。线程池的使用向线程池提交任务...原创 2020-10-12 18:31:39 · 174 阅读 · 1 评论 -
Java并发编程(六)——Java中的并发工具类
等待多线程完成的CountDownLatchCountDownLatch允许一个或多个线程等待其他线程完成操作。join用于让当前执行线程等待join线程执行结束。其实现原理是不停检查join线程是否存活,如果join线程存活则让当前线程永远等待。直到join线程中止后,线程的this.notifyAll()方法会被调用,调用notidyAll()方法是在JVM里实现的。同步屏障CyclicBarrier让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,原创 2020-10-12 11:22:24 · 156 阅读 · 0 评论 -
Java并发编程(五)——Java并发容器和框架
ConcurrentHashMap的实现原理与应用1、线程不安全的HashMapHashMap在并发执行put操作时会引起死循环,是因为多线程会导致HashMap的Entry链表形成环形数据结构,一旦形成环形数据结构,Entry的next节点永远不为空,就会产生死循环获取Entry。2、效率低下的HashTableHashTable容器使用synchronized来保证线程安全,但在线程竞争激烈的情况下HashTable的效率非常低下。因为当一个线程访问HashTable的同步方法,其他线程也访问H原创 2020-10-12 11:10:30 · 147 阅读 · 0 评论 -
Java并发编程(四)——Java中的锁
Lock接口一个锁能够防止多个线程同时访问共享资源(但是有些锁可以允许多个线程并发的访问共享资源,比如读写锁)。Lock接口提供了与synchronized关键字类似的同步功能,只是在使用时需要显式地获取和释放锁。虽然它缺少了(通过synchronized块或者方法所提供的)隐式获取释放锁的便捷性,但是却拥有了锁获取与释放的可操作性、可中断的获取锁以及超时获取锁等多种synchronized关键字所不具备的同步特性。不要将获取锁的过程写在try块中,因为如果在获取锁(自定义锁的实现)时发生了异常,异常原创 2020-10-11 11:07:53 · 88 阅读 · 0 评论 -
Java并发编程(三)
线程在一个进程里可以创建多个线程,这些线程都拥有各自的计算器、堆栈和局部变量等属性,并且能够访问共享的内存变量。处理器在这些线程上高速切换,让使用者感觉到这些线程在同时执行。一个线程在一个时刻只能运行在一个处理器核心上。将数据一致性不强的操作派发给其他线程处理(也可以使用消息队列)。线程优先级在Java线程中,通过一个整型成员变量priority来控制优先级,优先级的范围从1~10,在线程构建的时候可以通过setPriority(iht)的方法来修改优先级,默认优先级是5,优先级高的线程分配时间片原创 2020-10-10 09:58:18 · 104 阅读 · 0 评论 -
Java并发编程(二)——Java内存模型
Java内存模型并发编程的两个关键问题:线程之间如何通信及线程之间如何同步1、线程之间的通信机制有两种:共享内存和消息传递在共享内存的并发模型里,线程之间共享程序的公共状态,通过写-读内存中的公共状态进行隐式通信。在消息传递的并发模型里,线程之间没有公共状态,线程之间必须通过发送消息来显式进行通信。2、同步是指程序中用于控制不同线程间操作发生相对顺序的机制。在共享内存并发模型里,同步是显式进行的。程序员必须显式指定某个方法或某段代码需要在线程之间互斥执行。在消息传递的并发模型里,由于消息的发原创 2020-10-02 22:22:42 · 103 阅读 · 0 评论 -
Java并发机制的底层实现原理
volatile的应用volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”。如果volatile变量修饰符使用恰当的话,它比synchronized的使用和执行成本更低,因为它不会引起线程上下文的切换和调度。可见性是指当一个线程修改一个共享的变量时,另一个线程能读到这个修改的值。volatile的定义与实现原理Java编程语言运行线程访问共享变量,为了确保共享变量能被准确和一致地更新,线程应该确保通过排它锁单独获得这个变量。如果一个字段被声明成volat原创 2020-09-27 18:59:42 · 83 阅读 · 0 评论