-
java 8 Streams简介
所属栏目:[大数据] 日期:2021-05-21 热度:52
目录 简介 Functional Interface Function:一个参数一个返回值 BiFunction:接收两个参数,一个返回值 Supplier:无参的Function Consumer:接收一个参数,不返回值 Predicate:接收一个参数,返回boolean Operator:接收和返回同样的类型 总结 简介 java 8[详细]
-
非阻塞算法(Lock-Free)的实现
所属栏目:[大数据] 日期:2021-05-21 热度:160
目录 非阻塞的栈 非阻塞的链表 非阻塞算法(Lock-Free)的实现 上篇文章我们讲到了使用锁会带来的各种缺点,本文将会讲解如何使用非阻塞算法。非阻塞算法一般会使用CAS来协调线程的操作。 虽然非阻塞算法有诸多优点,但是在实现上要比基于锁的算法更加繁琐和[详细]
-
同步类的基础AbstractQueuedSynchronizer(AQS)
所属栏目:[大数据] 日期:2021-05-21 热度:58
同步类的基础AbstractQueuedSynchronizer(AQS) 我们之前介绍了很多同步类,比如ReentrantLock,Semaphore,CountDownLatch,ReentrantReadWriteLock,FutureTask等。 AQS封装了实现同步器时设计的大量细节问题。他提供了FIFO的wait queues并且提供了一个int型的s[详细]
-
使用ExecutorService来停止线程服务
所属栏目:[大数据] 日期:2021-05-21 热度:85
文章目录 使用shutdown 使用shutdownNow 使用ExecutorService来停止线程服务 之前的文章中我们提到了ExecutorService可以使用shutdown和shutdownNow来关闭。 这两种关闭的区别在于各自的安全性和响应性。shutdownNow强行关闭速度更快,但是风险也更大,因为[详细]
-
非阻塞同步机制和CAS
所属栏目:[大数据] 日期:2021-05-21 热度:98
目录 什么是非阻塞同步 悲观锁和乐观锁 CAS 非阻塞同步机制和CAS 我们知道在java 5之前同步是通过Synchronized关键字来实现的,在java 5之后,java.util.concurrent包里面添加了很多性能更加强大的同步类。这些强大的类中很多都实现了非阻塞的同步机制从而帮[详细]
-
java中CompletionService的使用
所属栏目:[大数据] 日期:2021-05-21 热度:90
java中CompletionService的使用 之前的文章中我们讲到了ExecutorService,通过ExecutorService我们可以提交一个个的task,并且返回Future,然后通过调用Future.get方法来返回任务的执行结果。 这种方式虽然有效,但是需要保存每个返回的Future值,还是比较麻[详细]
-
java程序员从小工到专家成神之路(2020版)-持续更新中,附详细
所属栏目:[大数据] 日期:2021-05-21 热度:69
目录 必须掌握的基础知识 1. Git Github 2. Linux 3. 数据结构和算法 4. HTTP / HTTPS 5. 设计模式 6. 计算机原理 java学习之路 1. 工具 1.1 开发工具 1.2 构建工具 1.3 虚拟化工具 1.4 CI工具 2. JDK 2.1 Java Collections 2.2 Java并发和多线程 2.3 Java 8[详细]
-
java中有界队列的饱和策略(reject policy)
所属栏目:[大数据] 日期:2021-05-21 热度:122
文章目录 AbortPolicy DiscardPolicy DiscardOldestPolicy CallerRunsPolicy 使用Semaphore java中有界队列的饱和策略(reject policy) 我们在使用ExecutorService的时候知道,在ExecutorService中有个一个Queue来保存提交的任务,通过不同的构造函数,我们可[详细]
-
Phaser都不懂,还学什么多线程
所属栏目:[大数据] 日期:2021-05-21 热度:183
前面的文章中我们讲到了CyclicBarrier、CountDownLatch的使用,这里再回顾一下CountDownLatch主要用在一个线程等待多个线程执行完毕的情况,而CyclicBarrier用在多个线程互相等待执行完毕的情况。 Phaser是java 7 引入的新的并发API。他引入了新的Phaser的概[详细]
-
由于不当的执行顺序导致的死锁
所属栏目:[大数据] 日期:2021-05-21 热度:106
为了保证线程的安全,我们引入了加锁机制,但是如果不加限制的使用加锁,就有可能会导致顺序死锁(Lock-Ordering Deadlock)。上篇文章我们也提到了在线程词中因为资源的不足而导致的资源死锁(Resource Deadlock)。 本文将会讨论一下顺序死锁的问题。 我们[详细]
-
在java中构建高效的结果缓存
所属栏目:[大数据] 日期:2021-05-21 热度:172
文章目录 使用HashMap 使用ConcurrentHashMap FutureTask 在java中构建高效的结果缓存 缓存是现代应用服务器中非常常用的组件。除了第三方缓存以外,我们通常也需要在java中构建内部使用的缓存。那么怎么才能构建一个高效的缓存呢? 本文将会一步步的进行揭[详细]
-
java内存模型(JMM)和happens-before
所属栏目:[大数据] 日期:2021-05-21 热度:54
目录 重排序 Happens-Before 安全发布 初始化安全性 java内存模型(JMM)和happens-before 我们知道java程序是运行在JVM中的,而JVM就是构建在内存上的虚拟机,那么内存模型JMM是做什么用的呢? 我们考虑一个简单的赋值问题: int a=100; JMM考虑的就是什么情[详细]
-
java中FutureTask的使用
所属栏目:[大数据] 日期:2021-05-21 热度:102
文章目录 FutureTask简介 Callable和Runnable的转换 以Runnable运行 java中FutureTask的使用 FutureTask简介 FutureTask是java 5引入的一个类,从名字可以看出来FutureTask既是一个Future,又是一个Task。 我们看下FutureTask的定义: public class FutureTa[详细]
-
java并发Exchanger的使用
所属栏目:[大数据] 日期:2021-05-21 热度:77
目录 简介 类定义 类继承 构造函数 两个主要方法 具体的例子 结语 简介 Exchanger是java 5引入的并发类,Exchanger顾名思义就是用来做交换的。这里主要是两个线程之间交换持有的对象。当Exchanger在一个线程中调用exchange方法之后,会等待另外的线程调用同[详细]
-
怎么在java中关闭一个thread
所属栏目:[大数据] 日期:2021-05-21 热度:78
怎么在java中关闭一个thread 我们经常需要在java中用到thread,我们知道thread有一个start()方法可以开启一个线程。那么怎么关闭这个线程呢? 有人会说可以用Thread.stop()方法。但是这个方法已经被废弃了。 根据Oracle的官方文档,Thread.stop是不安全的[详细]
-
java中ThreadPool的介绍和使用
所属栏目:[大数据] 日期:2021-05-21 热度:66
文章目录 Thread Pool简介 Executors,Executor 和 ExecutorService ThreadPoolExecutor ScheduledThreadPoolExecutor ForkJoinPool java中ThreadPool的介绍和使用 Thread Pool简介 在Java中,threads是和系统的threads相对应的,用来处理一系列的系统资源。[详细]
-
在java中使用JMH(Java Microbenchmark Harness)做性能测试
所属栏目:[大数据] 日期:2021-05-21 热度:150
文章目录 使用JMH做性能测试 BenchmarkMode Fork和Warmup State和Scope 在java中使用JMH(Java Microbenchmark Harness)做性能测试 JMH的全称是Java Microbenchmark Harness,是一个open JDK中用来做性能测试的套件。该套件已经被包含在了JDK 12中。 本文将[详细]
-
java中Runnable和Callable的区别
所属栏目:[大数据] 日期:2021-05-21 热度:159
文章目录 运行机制 返回值的不同 Exception处理 java中Runnable和Callable的区别 在java的多线程开发中Runnable一直以来都是多线程的核心,而Callable是java1.5添加进来的一个增强版本。 本文我们会详细探讨Runnable和Callable的区别。 运行机制 首先看下Run[详细]
-
java并发中CountDownLatch的使用
所属栏目:[大数据] 日期:2021-05-21 热度:94
文章目录 主线程等待子线程全都结束之后再开始运行 等待所有线程都准备好再一起执行 停止CountdownLatch的await java并发中CountDownLatch的使用 在java并发中,控制共享变量的访问非常重要,有时候我们也想控制并发线程的执行顺序,比如:等待所有线程都执[详细]
-
java中Future的使用
所属栏目:[大数据] 日期:2021-05-21 热度:170
文章目录 创建Future 从Future获取结果 取消Future 多线程环境中运行 java中Future的使用 Future是java 1.5引入的一个interface,可以方便的用于异步结果的获[详细]
-
java 中的fork join框架
所属栏目:[大数据] 日期:2021-05-21 热度:157
文章目录 ForkJoinPool ForkJoinWorkerThread ForkJoinTask 在ForkJoinPool中提交Task java 中的fork join框架 fork join框架是java 7中引入框架,这个框架的引入主要是为了提升并行计算的能力。 fork join主要有两个步骤,第一就是fork,将一个大任务分成很[详细]
-
java并发中的Synchronized关键词
所属栏目:[大数据] 日期:2021-05-21 热度:69
文章目录 为什么要同步 Synchronized关键词 Synchronized Instance Methods Synchronized Static Methods Synchronized Blocks java并发中的Synchronized关键词 如果在多线程的环境中,我们经常会遇到资源竞争的情况,比如多个线程要去同时修改同一个共享变[详细]
-
java中interrupt,interrupted和isInterrupted的区别
所属栏目:[大数据] 日期:2021-05-21 热度:172
文章目录 isInterrupted interrupted interrupt java中interrupt,interrupted和isInterrupted的区别 前面的文章我们讲到了调用interrupt()来停止一个Thread,本文将会详细讲解java中三个非常相似的方法interrupt,interrupted和isInterrupted。 isInterrupt[详细]
-
java中的Volatile关键字使用
所属栏目:[大数据] 日期:2021-05-21 热度:134
文章目录 什么时候使用volatile Happens-Before java中的Volatile关键字使用 在本文中,我们会介绍java中的一个关键字volatile。 volatile的中文意思是易挥发的,不稳定的。那么在java中使用是什么意思呢? 我们知道,在java中,每个线程都会有个自己的内存[详细]
-
java中ThreadLocal的使用
所属栏目:[大数据] 日期:2021-05-21 热度:51
文章目录 在Map中存储用户数据 在ThreadLocal中存储用户数据 java中ThreadLocal的使用 ThreadLocal主要用来为当前线程存储数据,这个数据只有当前线程可以访问。 在定义ThreadLocal的时候,我们可以同时定义存储在ThreadLocal中的特定类型的对象。 ThreadLoc[详细]