首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
java基础、集合、并发系列文章
程序那些事
创建于2021-08-26
订阅专栏
java基础、集合、并发系列文章
等 24 人订阅
共88篇文章
创建于2021-08-26
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
java中CompletionService的使用
之前的文章中我们讲到了ExecutorService,通过ExecutorService我们可以提交一个个的task,并且返回Future,然后通过调用Future.get方法来返回任务的执行结果。 上面的例子中,我们定义了3个task,通过调用executor.invokeA…
在java中构建高效的结果缓存
缓存是现代应用服务器中非常常用的组件。除了第三方缓存以外,我们通常也需要在java中构建内部使用的缓存。那么怎么才能构建一个高效的缓存呢? 本文将会一步步的进行揭秘。 缓存通常的用法就是构建一个内存中使用的Map,在做一个长时间的操作比如计算之前,先在Map中查询一下计算的结果…
java中使用Semaphore构建阻塞对象池
Semaphore是java 5中引入的概念,叫做计数信号量。主要用来控制同时访问某个特定资源的访问数量或者执行某个操作的数量。 Semaphore中定义了一组虚拟的permits,通过获取和释放这些permits,Semaphore可以控制资源的个数。 Semaphore的这…
java多线程之Phaser
前面的文章中我们讲到了CyclicBarrier、CountDownLatch的使用,这里再回顾一下CountDownLatch主要用在一个线程等待多个线程执行完毕的情况,而CyclicBarrier用在多个线程互相等待执行完毕的情况。 Phaser是java 7 引入的新的并…
java中FutureTask的使用
FutureTask是java 5引入的一个类,从名字可以看出来FutureTask既是一个Future,又是一个Task。 FutureTask实现了RunnableFuture接口,RunnableFuture接口是Runnable和Future的综合体。 作为一个Futu…
java中ThreadLocalRandom的使用
在java中我们通常会需要使用到java.util.Random来便利的生产随机数。但是Random是线程安全的,如果要在线程环境中的话就有可能产生性能瓶颈。 从代码中我们可以看到,方法内部使用了AtomicLong,并调用了它的compareAndSet方法来保证线程安全性。…
在java中使用JMH(Java Microbenchmark Harness)做性能测试
JMH的全称是Java Microbenchmark Harness,是一个open JDK中用来做性能测试的套件。该套件已经被包含在了JDK 12中。 本文将会讲解如何使用JMH来在java中做性能测试。 如果我们想测试某个方法的性能,一般来说就是重复执行某个方法n次,求出总…
java中CyclicBarrier的使用
CyclicBarrier是java 5中引入的线程安全的组件。它有一个barrier的概念,主要用来等待所有的线程都执行完毕,然后再去执行特定的操作。 假如我们有很多个线程,每个线程都计算出了一些数据,然后我们需要等待所有的线程都执行完毕,再把各个线程计算出来的数据加起来,的…
java并发中CountDownLatch的使用
在java并发中,控制共享变量的访问非常重要,有时候我们也想控制并发线程的执行顺序,比如:等待所有线程都执行完毕之后再执行另外的线程,或者等所有线程都准备好了才开始所有线程的执行等。 这个时候我们就可以使用到CountDownLatch。 简单点讲,CountDownLatch…
java中Locks的使用
之前文章中我们讲到,java中实现同步的方式是使用synchronized block。在java 5中,Locks被引入了,来提供更加灵活的同步控制。 本文将会深入的讲解Lock的使用。 我们在之前的Synchronized Block的文章中讲到了使用Synchronize…
java中的fork join框架
fork join框架是java 7中引入框架,这个框架的引入主要是为了提升并行计算的能力。 fork join主要有两个步骤,第一就是fork,将一个大任务分成很多个小任务,第二就是join,将第一个任务的结果join起来,生成最后的结果。如果第一步中并没有任何返回值,joi…
java中ThreadPool的介绍和使用
在Java中,threads是和系统的threads相对应的,用来处理一系列的系统资源。不管在windows和linux下面,能开启的线程个数都是有限的,如果你在java程序中无限制的创建thread,那么将会遇到无线程可创建的情况。 CPU的核数是有限的,如果同时有多个线程正…
java中的daemon thread
java中有两种类型的thread,user threads 和 daemon threads。 User threads是高优先级的thread,JVM将会等待所有的User Threads运行完毕之后才会结束运行。 daemon threads是低优先级的thread,它的…
java中interrupt,interrupted和isInterrupted的区别
前面的文章我们讲到了调用interrupt()来停止一个Thread,本文将会详细讲解java中三个非常相似的方法interrupt,interrupted和isInterrupted。 首先看下最简单的isInterrupted方法。isInterrupted是Thread类…
java中的Atomic类
在多线程环境中,我们最常遇到的问题就是变量的值进行同步。因为变量需要在多线程中进行共享,所以我们必须需要采用一定的同步机制来进行控制。 通过之前的文章,我们知道可以采用Lock的机制,当然也包括今天我们讲的Atomic类。 下面我们从两种方式来分别介绍。 在之前的文章中,我们也…
怎么在java中关闭一个thread
我们经常需要在java中用到thread,我们知道thread有一个start()方法可以开启一个线程。那么怎么关闭这个线程呢? 有人会说可以用Thread.stop()方法。但是这个方法已经被废弃了。 根据Oracle的官方文档,Thread.stop是不安全的。因为调用st…
java中join的使用
join()应该是我们在java中经常会用到的一个方法,它主要是将当前线程置为WAITTING状态,然后等待调用的线程执行完毕或被interrupted。 Join()还有个happen-before的特性,这就是如果thread t1调用 t2.join(), 那么当t2返回…
java中线程的生命周期
线程是java中绕不过去的一个话题, 今天本文将会详细讲解java中线程的生命周期,希望可以给大家一些启发。 RUNNABLE - 可运行状态的Thread,包括准备运行和正在运行的。 NEW 表示线程创建了,但是还没有开始执行。我们看一个NEW的例子: Runnable表示线…
java中ThreadLocal的使用
ThreadLocal主要用来为当前线程存储数据,这个数据只有当前线程可以访问。 在定义ThreadLocal的时候,我们可以同时定义存储在ThreadLocal中的特定类型的对象。 上面我们定义了一个存储Integer的ThreadLocal对象。 我可以将ThreadLoc…
java中Runnable和Callable的区别
在java的多线程开发中Runnable一直以来都是多线程的核心,而Callable是java1.5添加进来的一个增强版本。 本文我们会详细探讨Runnable和Callable的区别。 Runnable需要实现run()方法,Callable需要实现call()方法。 所以R…
下一页