随笔分类 - 并发与多线程
并发与多线程文章
摘要:前面的文章中我们讲到了CyclicBarrier、CountDownLatch的使用,这里再回顾一下CountDownLatch主要用在一个线程等待多个线程执行完毕的情况,而CyclicBarrier用在多个线程互相等待执行完毕的情况。 Phaser是java 7 引入的新的并发API。他引入了新的
阅读全文
摘要:文章目录CompletableFuture作为Future使用异步执行code组合FuturesthenApply() 和 thenCompose()的区别并行执行任务异常处理 java中CompletableFuture的使用 之前的文章中,我们讲解了Future, 本文我们将会继续讲解java
阅读全文
摘要:文章目录FutureTask简介Callable和Runnable的转换以Runnable运行 java中FutureTask的使用 FutureTask简介 FutureTask是java 5引入的一个类,从名字可以看出来FutureTask既是一个Future,又是一个Task。 我们看下Fut
阅读全文
摘要:java中ThreadLocalRandom的使用 在java中我们通常会需要使用到java.util.Random来便利的生产随机数。但是Random是线程安全的,如果要在线程环境中的话就有可能产生性能瓶颈。 我们以Random中常用的nextInt方法为例来具体看一下: public int n
阅读全文
摘要:文章目录使用JMH做性能测试BenchmarkModeFork和WarmupState和Scope 在java中使用JMH(Java Microbenchmark Harness)做性能测试 JMH的全称是Java Microbenchmark Harness,是一个open JDK中用来做性能测试
阅读全文
摘要:文章目录CyclicBarrier的方法CyclicBarrier的使用 java中CyclicBarrier的使用 CyclicBarrier是java 5中引入的线程安全的组件。它有一个barrier的概念,主要用来等待所有的线程都执行完毕,然后再去执行特定的操作。 假如我们有很多个线程,每个线
阅读全文
摘要:文章目录主线程等待子线程全都结束之后再开始运行等待所有线程都准备好再一起执行停止CountdownLatch的await java并发中CountDownLatch的使用 在java并发中,控制共享变量的访问非常重要,有时候我们也想控制并发线程的执行顺序,比如:等待所有线程都执行完毕之后再执行另外的
阅读全文
摘要:文章目录Lock和Synchronized Block的区别Lock interfaceReentrantLockReentrantReadWriteLockStampedLockConditions java中Locks的使用 之前文章中我们讲到,java中实现同步的方式是使用synchroniz
阅读全文
摘要:文章目录ForkJoinPoolForkJoinWorkerThreadForkJoinTask在ForkJoinPool中提交Task java 中的fork join框架 fork join框架是java 7中引入框架,这个框架的引入主要是为了提升并行计算的能力。 fork join主要有两个步
阅读全文
摘要:文章目录Thread Pool简介Executors, Executor 和 ExecutorServiceThreadPoolExecutorScheduledThreadPoolExecutorForkJoinPool java中ThreadPool的介绍和使用 Thread Pool简介 在J
阅读全文
摘要:java中的daemon thread java中有两种类型的thread,user threads 和 daemon threads。 User threads是高优先级的thread,JVM将会等待所有的User Threads运行完毕之后才会结束运行。 daemon threads是低优先级的
阅读全文
摘要:文章目录isInterruptedinterruptedinterrupt java中interrupt,interrupted和isInterrupted的区别 前面的文章我们讲到了调用interrupt()来停止一个Thread,本文将会详细讲解java中三个非常相似的方法interrupt,i
阅读全文
摘要:文章目录问题背景Lock使用Atomic java中的Atomic类 问题背景 在多线程环境中,我们最常遇到的问题就是变量的值进行同步。因为变量需要在多线程中进行共享,所以我们必须需要采用一定的同步机制来进行控制。 通过之前的文章,我们知道可以采用Lock的机制,当然也包括今天我们讲的Atomic类
阅读全文
摘要:怎么在java中关闭一个thread 我们经常需要在java中用到thread,我们知道thread有一个start()方法可以开启一个线程。那么怎么关闭这个线程呢? 有人会说可以用Thread.stop()方法。但是这个方法已经被废弃了。 根据Oracle的官方文档,Thread.stop是不安全
阅读全文
摘要:java中join的使用 join()应该是我们在java中经常会用到的一个方法,它主要是将当前线程置为WAITTING状态,然后等待调用的线程执行完毕或被interrupted。 join()是Thread中定义的方法,我们看下他的定义: /** * Waits for this thread t
阅读全文
摘要:文章目录java中Thread的状态NEWRunnableBLOCKEDWAITINGTIMED_WAITINGTERMINATED java中线程的生命周期 线程是java中绕不过去的一个话题, 今天本文将会详细讲解java中线程的生命周期,希望可以给大家一些启发。 java中Thread的状态
阅读全文
摘要:文章目录在Map中存储用户数据在ThreadLocal中存储用户数据 java中ThreadLocal的使用 ThreadLocal主要用来为当前线程存储数据,这个数据只有当前线程可以访问。 在定义ThreadLocal的时候,我们可以同时定义存储在ThreadLocal中的特定类型的对象。 Thr
阅读全文
摘要:文章目录运行机制返回值的不同Exception处理 java中Runnable和Callable的区别 在java的多线程开发中Runnable一直以来都是多线程的核心,而Callable是java1.5添加进来的一个增强版本。 本文我们会详细探讨Runnable和Callable的区别。 运行机制
阅读全文
摘要:文章目录创建ExecutorService为ExecutorService分配Tasks关闭ExecutorServiceFutureScheduledExecutorServiceExecutorService和 Fork/Join java并发中ExecutorService的使用 Execut
阅读全文
摘要:文章目录创建Future从Future获取结果取消Future多线程环境中运行 java中Future的使用 Future是java 1.5引入的一个interface,可以方便的用于异步结果的获取。 本文将会通过具体的例子讲解如何使用Future。 创建Future 正如上面所说,Future代表
阅读全文