
Java多线程编程
文章平均质量分 91
zhaoliwen是猪啊
这个作者很懒,什么都没留下…
展开
-
Java多线程(十五)Future和CompletableFuture的13种方法
Java多线程(十五)Future和CompletableFuture的13种方法 Java多线程(十五)Future和CompletableFuture的13种方法FutureFutureTaskCompletableFuture1、创建CompletableFuture2、计算结果完成时的回调方法3、thenApply 方法4、handle 方法5、thenAccept 消费处理结果6、thenRun 方法7、thenCombine 合并任务8、thenAcceptBoth9、applyToEithe原创 2021-10-08 09:39:55 · 359 阅读 · 0 评论 -
Java多线程(十四)原子操作类
Java多线程(十三)原子操作类 Java多线程(十三)原子操作类What and Why原子更新基本类型类实现原理原子更新数组原子更新引用类型AtomicReference 示例AtomicReferenceFieldUpdater 示例AtomicMarkableReference 示例原子更新字段类What and Why原子的本意是不能被分割的粒子,而对于一个操作来说,如果它是不可被中断的一个或者一组操作,那么他就是原子操作。显然,原子操作是安全的,因为它不会被打断。平时我们见到的很多操作原创 2021-10-07 09:53:29 · 233 阅读 · 0 评论 -
Java多线程(十三) Fork / Join
Java多线程(十三) Fork / Join本篇博客是学习Fork / Join框架后的总结笔记,知识点来源于《Java并发编程的艺术》一书。 Java多线程(十三) Fork / JoinFork / Join 框架工作窃取算法Fork / Join 设计使用 Fork / JoinFork / Join 框架Fork/Join框架是Java 7提供的一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。这种思想类似于分而治之的思想。我们再通原创 2021-10-05 14:54:15 · 1141 阅读 · 0 评论 -
Java多线程(十二) 类比理解线程池 && ThreadPoolExecutor
Java多线程(十二) 类比理解线程池 && ThreadPoolExecutor Java多线程(十二) 类比理解线程池 && ThreadPoolExecutor线程池举个生活中的例子理解线程池拒绝策略线程池的使用创建线程池向线程池提交任务关闭线程池优化线程池线程池例子需要线程数 <= 核心线程数+阻塞队列大小核心线程数+阻塞队列大小 < 需要线程数 <=线程池最大线程数 + 阻塞队列大小线程池最大线程数 + 阻塞队列大小 < 需要线程数线程池原创 2021-10-04 15:47:39 · 289 阅读 · 0 评论 -
Java多线程(十一) Java中的阻塞队列
Java多线程(十一) Java中的阻塞队列 Java多线程(十一) Java中的阻塞队列阻塞队列抛出异常返回特殊值一直阻塞超时退出Java中的阻塞队列SynchronousQueue阻塞队列的实现原理阻塞队列阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作支持阻塞的插入和移除方法。支持阻塞的插入方法:意思是当队列满时,队列会阻塞插入元素的线程,直到队列不满。支持阻塞的移除方法:意思是在队列为空时,获取元素的线程会等待队列变为非空。阻塞队列常用于生产者和消原创 2021-10-03 17:12:16 · 247 阅读 · 0 评论 -
Java多线程(十)Java并发工具类——CountDownLatch && CyclicBarrier && Semaphore && Exchanger
Java多线程(十)Java并发工具类——CountDownLatch && CyclicBarrier && Semaphore && Exchanger Java多线程(十)Java并发工具类——CountDownLatch && CyclicBarrier && Semaphore && ExchangerCountDownLatchCyclicBarrierSemaphoreExchangerCoun原创 2021-09-28 22:01:16 · 196 阅读 · 0 评论 -
Java多线程(九)ConcurrentHashMap && CopyOnWriteArrayList && CopyOnWriteArraySet
Java多线程(九)ConcurrentHashMap && CopyOnWriteArrayList && CopyOnWriteArraySet Java多线程(九)ConcurrentHashMap && CopyOnWriteArrayList && CopyOnWriteArraySetConcurrentHashMap为什么需要 ConcurrentHashMapConcurrentHashMap 的结构get操作put操作siz原创 2021-09-28 10:41:22 · 223 阅读 · 0 评论 -
Java多线程(八)生产者消费者——Condition和精准唤醒
Java多线程(七)生产者消费者——Condition和精准唤醒 Java多线程(七)生产者消费者——Condition和精准唤醒什么是ConditionCondition解决生产者消费者问题Condition 精准唤醒Condition 实现分析等待队列等待唤醒什么是Condition对于任意一个java对象,它都拥有一组定义在java.lang.Object上监视器方法,包括wait(),wait(long timeout),notify(),notifyAll(),这些方法配合synchron原创 2021-09-26 21:49:05 · 544 阅读 · 0 评论 -
Java多线程(七)生产者消费者——wait && notify && 虚假唤醒
Java多线程(七)生产者消费者——wait && notify && 虚假唤醒 Java多线程(七)生产者消费者——wait && notify && 虚假唤醒生产者消费者问题wait() 和 notify()wait() 和 sleep()区别实现生产者消费者问题代码问题 —— 虚假唤醒生产者消费者问题生产者消费者问题是一个很经典的多线程同步问题,比如有两个线程A和B,它们共享一个固定大小的缓冲区,A线程产生数据放入缓冲区,B线程从缓原创 2021-09-26 09:51:05 · 240 阅读 · 0 评论 -
Java多线程(六) 解决多线程安全——ReentrantLock及源码解析
Java多线程(五) 解决多线程安全——ReentrantLock及源码解析 Java多线程(五) 解决多线程安全——ReentrantLock及源码解析ReentrantLock的使用ReentrantLock与synchronized区别ReentrantLock的特性ReentrantLock 源码解析ReentrantReadWriteLock锁在之前的文章《Java多线程(三) 多线程不安全的典型例子》中我写到了在多线程环境中经常会碰到多线程非安全的情况,并且举出了三种典型例子,之后我在上一篇原创 2021-09-24 09:27:47 · 562 阅读 · 0 评论 -
Java多线程(五) 乐观锁和CAS机制
Java多线程(五) 乐观锁和CAS机制 Java多线程(五) 乐观锁和CAS机制悲观锁和乐观锁悲观锁乐观锁CAS机制悲观锁和乐观锁悲观锁悲观锁是基于一种悲观的态度类来防止一切数据冲突,它是以一种预防的姿态在修改数据之前把数据锁住,然后再对数据进行读写,在它释放锁之前任何人都不能对其数据进行操作,直到前面一个人把锁释放后下一个人数据加锁才可对数据进行加锁,然后才可以对数据进行操作。synchronized是悲观锁,这种线程一旦得到锁,其他需要锁的线程就挂起的情况就是悲观锁。特点:可以完全保证数据的原创 2021-09-24 09:26:52 · 237 阅读 · 0 评论 -
Java多线程(四) 解决多线程安全——synchronized
Java多线程(四) 解决多线程安全——synchronized Java多线程(四) 解决多线程安全——synchronizedsynchronized的使用synchronized 是重量型锁synchronized 原理和例子synchronized 作用于实例方法synchronized 作用于代码块synchronized作用于静态方法synchronized 可重入锁在上一篇文章《Java多线程(三) 多线程不安全的典型例子》中说到了多线程不安全的问题以及三个典型例子,在这一篇中讲解一中保证原创 2021-09-22 15:55:04 · 395 阅读 · 0 评论 -
Java多线程(三) 多线程不安全的典型例子
Java多线程(三) 多线程不安全的典型例子多线程给程序带来了高效率,但是同时也会带来不安全的问题,例如,当多线程操作共享资源时,如果不加以保护和限制,就有可能带来问题,下面三个例子就说明了多线程操作共享资源时的问题。1、买票问题现实中大家都有买演唱会门票、火车飞机票的时候,如果票的数量只有100张,但是10000人都要强的话,肯定是要使用多线程的方法进行处理。在这个例子中,假设有20张票,而有三个人想要买这20张票,写一个简单例子就会发现问题。class Ticket implements Run原创 2021-09-20 22:18:17 · 1303 阅读 · 1 评论 -
Java多线程(二) 实现接口方式以及lamda表达式
Java多线程(二) 实现接口方式以及lamda表达式当我们写出一个interface接口后,需要有类去实现implements他,并且实现接口中的函数,而实现接口的方式有五种,下面分别介绍一下这五种方式。1、普通方式最常见的就是在一个类的外部implements接口interface Student{ void study();}class Pupil implements Student{ @Override public void study() {原创 2021-09-20 15:51:23 · 310 阅读 · 0 评论 -
Java多线程(一)实现多线程
Java多线程(一)实现多线程在Java中,可以用Thread、Runnable以及Callable实现多线程Thread 实现多线程用Thread方法那么就是目标类继承(extends)Thread类,然后重写父类的run函数,在执行多线程程序时,使用start函数执行。class sellTicket extends Thread{ private int tickets = 20; @Override public void run() { t原创 2021-09-18 21:15:56 · 241 阅读 · 0 评论