一文读懂密码学中的证书

2020-04-16
阅读 2 分钟
3.4k
之前的文章中,我们讲到了数字签名,数字签名的作用就是防止篡改和伪装,并且能够防止否认。但是要正确运用数字签名技术还有一个非常大的前提,那就是用来验证签名的公钥必须真正的属于发送者。

java内存模型(JMM)和happens-before

2020-04-16
阅读 5 分钟
1.4k
java内存模型(JMM)和happens-before 我们知道java程序是运行在JVM中的,而JVM就是构建在内存上的虚拟机,那么内存模型JMM是做什么用的呢? 我们考虑一个简单的赋值问题: {代码...} JMM考虑的就是什么情况下读取变量a的线程可以看到值为100。看起来这是一个很简单的问题,赋值之后不就可以读到值了吗? 但是上面的只是我...

非阻塞算法(Lock-Free)的实现

2020-04-15
阅读 3 分钟
1.5k
非阻塞算法(Lock-Free)的实现 上篇文章我们讲到了使用锁会带来的各种缺点,本文将会讲解如何使用非阻塞算法。非阻塞算法一般会使用CAS来协调线程的操作。 虽然非阻塞算法有诸多优点,但是在实现上要比基于锁的算法更加繁琐和负责。 本文将会介绍两个是用非阻塞算法实现的数据结构。 非阻塞的栈 我们先使用CAS来构建几...

非阻塞同步机制和CAS

2020-04-15
阅读 2 分钟
2.6k
我们知道在java 5之前同步是通过Synchronized关键字来实现的,在java 5之后,java.util.concurrent包里面添加了很多性能更加强大的同步类。这些强大的类中很多都实现了非阻塞的同步机制从而帮助其提升性能。

同步类的基础AbstractQueuedSynchronizer(AQS)

2020-04-14
阅读 3 分钟
1.2k
我们之前介绍了很多同步类,比如ReentrantLock,Semaphore, CountDownLatch, ReentrantReadWriteLock,FutureTask等。

java程序员从小工到专家成神之路(2020版)

2020-04-13
阅读 4 分钟
2.3k
java作为第一大编程语言,可谓源远流长,一代又一代的java程序员前仆后继走在java学习的路上。java程序员的学习之路在2020年又有什么变化呢?

由于不当的执行顺序导致的死锁

2020-04-11
阅读 3 分钟
1.1k
为了保证线程的安全,我们引入了加锁机制,但是如果不加限制的使用加锁,就有可能会导致顺序死锁(Lock-Ordering Deadlock)。上篇文章我们也提到了在线程词中因为资源的不足而导致的资源死锁(Resource Deadlock)。

java中有界队列的饱和策略(reject policy)

2020-04-10
阅读 5 分钟
4.4k
我们在使用ExecutorService的时候知道,在ExecutorService中有个一个Queue来保存提交的任务,通过不同的构造函数,我们可以创建无界的队列(ExecutorService.newCachedThreadPool)和有界的队列(ExecutorService newFixedThreadPool(int nThreads))。

我们的线程被饿死了

2020-04-09
阅读 1 分钟
1.8k
那么线程池使用不当可不可能产生死锁呢?我们知道死锁是循环争夺资源而产生的。线程池中的线程也是资源的一种,那么如果对线程池中的线程进行争夺的话也是可能产生死锁的。

使用ExecutorService来停止线程服务

2020-04-08
阅读 4 分钟
1.1k
这两种关闭的区别在于各自的安全性和响应性。shutdownNow强行关闭速度更快,但是风险也更大,因为任务可能正在执行的过程中被结束了。而shutdown正常关闭虽然速度比较慢,但是却更安全,因为它一直等到队列中的所有任务都执行完毕之后才关闭。

都2020年了,这5个java IDE神器你还不知道?

2020-04-07
阅读 3 分钟
2.1k
TIOBE的4月份编程语言排行榜出来了,java还是稳坐第一位,java最新的版本也到了13,一直以来java凭借其企业级应用的优势和大量的框架级应用俘获了大量的粉丝和企业客户。

java中CompletionService的使用

2020-04-03
阅读 3 分钟
1.1k
之前的文章中我们讲到了ExecutorService,通过ExecutorService我们可以提交一个个的task,并且返回Future,然后通过调用Future.get方法来返回任务的执行结果。

在java中构建高效的结果缓存

2020-04-02
阅读 5 分钟
1.5k
缓存是现代应用服务器中非常常用的组件。除了第三方缓存以外,我们通常也需要在java中构建内部使用的缓存。那么怎么才能构建一个高效的缓存呢? 本文将会一步步的进行揭秘。

java中使用Semaphore构建阻塞对象池

2020-04-01
阅读 2 分钟
1.2k
java中使用Semaphore构建阻塞对象池 Semaphore是java 5中引入的概念,叫做计数信号量。主要用来控制同时访问某个特定资源的访问数量或者执行某个操作的数量。 Semaphore中定义了一组虚拟的permits,通过获取和释放这些permits,Semaphore可以控制资源的个数。 Semaphore的这个特性可以用来构造资源池,比如数据库连接池...

java多线程之Phaser

2020-03-31
阅读 3 分钟
1.4k
前面的文章中我们讲到了CyclicBarrier、CountDownLatch的使用,这里再回顾一下CountDownLatch主要用在一个线程等待多个线程执行完毕的情况,而CyclicBarrier用在多个线程互相等待执行完毕的情况。

关于CompletableFuture的一切,看这篇文章就够了

2020-03-30
阅读 5 分钟
3.6k
java中CompletableFuture的使用 之前的文章中,我们讲解了Future, 本文我们将会继续讲解java 8中引入的CompletableFuture的用法。 CompletableFuture首先是一个Future,它拥有Future所有的功能,包括获取异步执行结果,取消正在执行的任务等。 除此之外,CompletableFuture还是一个CompletionStage。 我们看下Completab...

java中FutureTask的使用

2020-03-28
阅读 3 分钟
2.8k
java中FutureTask的使用 FutureTask简介 FutureTask是java 5引入的一个类,从名字可以看出来FutureTask既是一个Future,又是一个Task。 我们看下FutureTask的定义: {代码...} {代码...} FutureTask实现了RunnableFuture接口,RunnableFuture接口是Runnable和Future的综合体。 作为一个Future,FutureTask可以执行异步计...

java中ThreadLocalRandom的使用

2020-03-27
阅读 3 分钟
2.3k
在java中我们通常会需要使用到java.util.Random来便利的生产随机数。但是Random是线程安全的,如果要在线程环境中的话就有可能产生性能瓶颈。

在java中使用JMH(Java Microbenchmark Harness)做性能测试

2020-03-26
阅读 4 分钟
2k
JMH的全称是Java Microbenchmark Harness,是一个open JDK中用来做性能测试的套件。该套件已经被包含在了JDK 12中。

java中CyclicBarrier的使用

2020-03-25
阅读 7 分钟
1.6k
CyclicBarrier是java 5中引入的线程安全的组件。它有一个barrier的概念,主要用来等待所有的线程都执行完毕,然后再去执行特定的操作。

java并发中CountDownLatch的使用

2020-03-24
阅读 5 分钟
1.9k
在java并发中,控制共享变量的访问非常重要,有时候我们也想控制并发线程的执行顺序,比如:等待所有线程都执行完毕之后再执行另外的线程,或者等所有线程都准备好了才开始所有线程的执行等。

java中Locks的使用

2020-03-23
阅读 6 分钟
1.6k
之前文章中我们讲到,java中实现同步的方式是使用synchronized block。在java 5中,Locks被引入了,来提供更加灵活的同步控制。

java中的fork join框架

2020-03-20
阅读 5 分钟
2.6k
fork join主要有两个步骤,第一就是fork,将一个大任务分成很多个小任务,第二就是join,将第一个任务的结果join起来,生成最后的结果。如果第一步中并没有任何返回值,join将会等到所有的小任务都结束。

java中ThreadPool的介绍和使用

2020-03-19
阅读 6 分钟
1.5k
在Java中,threads是和系统的threads相对应的,用来处理一系列的系统资源。不管在windows和linux下面,能开启的线程个数都是有限的,如果你在java程序中无限制的创建thread,那么将会遇到无线程可创建的情况。

java中的daemon thread

2020-03-18
阅读 3 分钟
3k
daemon threads是低优先级的thread,它的作用是为User Thread提供服务。 因为daemon threads的低优先级,并且仅为user thread提供服务,所以当所有的user thread都结束之后,JVM会自动退出,不管是否还有daemon threads在运行中。

java中interrupt,interrupted和isInterrupted的区别

2020-03-17
阅读 4 分钟
2.7k
前面的文章我们讲到了调用interrupt()来停止一个Thread,本文将会详细讲解java中三个非常相似的方法interrupt,interrupted和isInterrupted。

java中的Atomic类

2020-03-16
阅读 2 分钟
963
java中的Atomic类 问题背景 在多线程环境中,我们最常遇到的问题就是变量的值进行同步。因为变量需要在多线程中进行共享,所以我们必须需要采用一定的同步机制来进行控制。 通过之前的文章,我们知道可以采用Lock的机制,当然也包括今天我们讲的Atomic类。 下面我们从两种方式来分别介绍。 Lock 在之前的文章中,我们也...

怎么在java中关闭一个thread

2020-03-15
阅读 3 分钟
2.6k
根据Oracle的官方文档,Thread.stop是不安全的。因为调用stop方法的时候,将会释放它获取的所有监视器锁(通过传递ThreadDeath异常实现)。如果有资源该监视器锁所保护的话,就可能会出现数据不一致的异常。并且这种异常很难被发现。 所以现在已经不推荐是用Thread.stop方法了。

java中join的使用

2020-03-14
阅读 4 分钟
1.1k
join()应该是我们在java中经常会用到的一个方法,它主要是将当前线程置为WAITTING状态,然后等待调用的线程执行完毕或被interrupted。

java中线程的生命周期

2020-03-13
阅读 7 分钟
1k
java中线程的生命周期 线程是java中绕不过去的一个话题, 今天本文将会详细讲解java中线程的生命周期,希望可以给大家一些启发。 java中Thread的状态 java中Thread有6种状态,分别是: NEW - 新创建的Thread,还没有开始执行 RUNNABLE - 可运行状态的Thread,包括准备运行和正在运行的。 BLOCKED - 正在等待资源锁的线程...