JUC
文章平均质量分 79
密码11位
这个作者很懒,什么都没留下…
展开
-
JUC介绍--阻塞队列(4组API)
常见队列家族使用阻塞队列的情况:多线程并发处理,线程池阻塞队列的四种API:方式抛出异常有返回值,不抛出异常阻塞 等待超时等待添加add()offer()put()offer(,)移除remove()poll()take()poll(,)判断队列首elementpeek--public class Test { public static void main(String[] args) throws Interrup.原创 2020-08-22 18:24:22 · 337 阅读 · 0 评论 -
JUC介绍--读写锁
读写锁,是一个更细粒度的锁一般对资源进行操作时,读取资源允许多线程同时占用;但是写入时为了保证数据安全我们要求只有一个线程操作。针对这种境况,在可重入锁的基础上提供了更加细粒度的锁–读写锁。//独占锁--写锁 一次只能被一个线程占有//共享锁--读锁 可以被多个线程占有public class ReadWriteLockDemo { public static void main(String[] args) {// MyCache myCache = new MyCac.原创 2020-08-22 16:36:47 · 156 阅读 · 0 评论 -
JUC介绍--常用辅助类(CountDownLatch CyclicBarrier Semaphore)
CountDownLatch减法计数器每次有线程调用countDownLatch.countDown()数量就-1数量减到0时,countDownLatch.await()会被唤醒,继续向下执行public class CountDownLatchDemo { public static void main(String[] args) throws InterruptedException { //总数是6,必须要执行任务的时候再使用 CountDownL.原创 2020-08-22 16:28:33 · 214 阅读 · 0 评论 -
JUC介绍--Callable
创建线程的方式之一,与Runnable接口的使用方式有以下区别可以有返回值可以抛出异常实现的方法不同 call()代码测试1. 线程的开启方式只能通过Runnable接口实现类,即new Thread(new Runnable()).start();2. FutureTask是Runnable接口的其中一个实现类;new Thread(new FutureTask<v>()).start();3.并且它可以通过Callable接口的实现类进行构造。所以,在Future原创 2020-08-22 11:15:12 · 140 阅读 · 0 评论 -
JUC介绍--不安全的集合演示和解决
传统并发操作List执行报错:java.util.ConcurrentModificationException 并发修改异常public class ListTest { public static void main(String[] args) { List<String> list = new ArrayList<>(); for (int i = 0; i < 10; i++) { new Th.原创 2020-08-22 10:20:33 · 152 阅读 · 0 评论 -
JUC介绍--生产者消费者模式的普通写法和JUC写法
什么是JUCjuc就是Java工具包java.util下的三个包概念解释:并发:多个线程操作同一个资源。CPU一核,通过快速轮询模拟出多条线程并行:CPU多核,多个线程同时进行,线程池并发编程的本质:充分利用CPU的资源首先要知道java是不能直接开启线程的(Java不能直接操作硬件),它是通过调用本地方法(native修饰的方法)来开启线程的,new Thread().start()源码如下 public synchronized void start() { .原创 2020-08-21 21:28:28 · 198 阅读 · 0 评论