线程通信之传统版生产者消费者模式

线程通信之传统版生产者消费者模式使用ReentrantLock完成生产者消费者模式import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; class ShareData {//资源...

Java 2020-03-01 PM 1364次 0条

LeetCode-15三数之和

LeetCode-15三数之和题目描述给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。 注意:答案中不可以包含重复的三元组。示例给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]题...

Java 2020-03-01 PM 1364次 0条

Java实现RSA加密与解密

Java实现RSA加密与解密前言之前没有做过关于RSA加解密的对接,今天做的时候踩到一些坑今天整理一下。踩坑记录当拿到私钥以后先打开看一下头部的加密方式:一般Java都是通过PKCS8的加密方式对文件进行解密的,网上找到的工具类也都是针对PKCS8进行解密,但是一般原始的文件都是通过PKCS1方式进行加密如果可以接触到正式环境的Linux系统可以执行如下命令:pkcs1私钥转pkcs8私钥:...

Java 2020-02-29 AM 3623次 0条

【转载】Java阻塞队列--BlockingQueue

【转载】Java阻塞队列--BlockingQueue一、什么是阻塞队列?阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿出元素的线程。阻塞队列就是生产者存放元素的容器。而消费者...

Java 2020-02-28 PM 1638次 0条

CyclicBarrier和Semaphore简介

CyclicBarrier和Semaphore简介一、CyclicBarrier简介CyclicBarrier的字面意思是可循环(Cyclic)使用的屏障(Barrier)。它要做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续干活,线程进入屏障通过CyclicBarrier的await()方法。需求一个线程组...

Java 2020-02-27 PM 1379次 0条

countDownLatch简介

countDownLatch简介前言countDownLatch是在java1.5被引入,存在于java.util.cucurrent包下。一、概念countDownLatch:类使一个线程等待其他线程各自执行完毕后再执行。countDownLatch是通过一个计数器来实现的,计数器的初始值是线程的数量。每当一个线程执行完毕后,计数器的值就-1,当计数器的值为0时,表示所有线程都执行完毕,然...

Java 2020-02-27 PM 1313次 0条

Java锁--公平和非公平锁

Java锁--公平和非公平锁前言公平锁和非公平锁的理解:如果一个线程组里,如果能保证每个线程都拿到锁,这个锁就是公平锁。相反,如果保证不了每个线程都能拿到锁,也就是存在线程饿死,那么这个锁就是非公平锁。一、概念公平锁:是指多个线程按照申请锁的顺序来获取锁,通过队列FIFO,先进先出,类似排队打饭,先来后到。非公平锁:是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的...

Java 2020-02-26 AM 1439次 0条

Java锁--可重入锁和递归锁简介

Java锁--可重入锁和递归锁简介一、概念介绍可重入锁(也叫递归锁):指的是同一线程外层函数获得锁之后,内层递归函数仍然可以获取该锁的代码,在同一线程在外层方法获取锁的时候,在进入内层方法会自动获取锁。也就说,线程可以进入任何一个它已经拥有的锁所同步着的代码块。作用:避免死锁。代码示例1class Phone{ public synchronized void sendSMS() t...

Java 2020-02-25 AM 1563次 0条

Java锁--自旋锁简介

Java锁--自旋锁简介一、概念自旋锁(spinlock):是指尝试获取锁的线程不会立即阻塞,而是采用循环的方式去尝试获取锁,这样的好处是减少线程上下文切换的消耗,缺点是循环会消耗CPU。代码实现public class SpinLockDemo { AtomicReference<Thread> atomicReference = new AtomicReference...

Java 2020-02-24 AM 1428次 0条

Java锁--读写锁简介

Java锁--读写锁简介1.ReadWriteLock同Lock一样也是一个接口,提供了readLock和writeLock两种锁的操作机制,一个是只读的锁,一个是写锁。读锁可以在没有写锁的时候被多个线程同时持有,写锁是独占的(排他的)。 每次只能有一个写线程,但是可以有多个线程并发地读数据。所有读写锁的实现必须确保写操作对读操作的内存影响。换句话说,一个获得了读锁的线程必须能看到前一个释放...

Java 2020-02-23 AM 1507次 0条