【转载】并发问题是怎样造成的

【转载】并发问题是怎样造成的我们的程序要运行,离不开CPU、内存、IO设备,但是他们三者之间的执行速度是有差异的。CPU 的执行速度最快,内存的速度次之,IO设备的速度最慢。一、为什么会有内存缓存CPU执行一条指令非常快,但是他从内存中读取某个数据时,就需要等待很长的时间,为了弥补速度上的巨大差距,让CPU不被内存拖垮,所以在CPU上增加了缓存。当CPU请求内存中的数据时,会先查看缓存中是否...

Java 2020-03-05 PM 1399次 0条

线程池简单介绍

线程池简单介绍一、线程池的优势线程池做的工作主要是控制运行的线程的数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量超出数量的线程排队等候,等其它线程执行完毕,再从队列中取出任务来执行。他的主要特点为:线程复用;控制最大并发数;管理线程。第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不...

Java 2020-03-02 PM 1693次 0条

【转载】ReentrantLock和synchronized的比较

【转载】ReentrantLock和synchronized的比较ReentrantLock和synchronized的比较。Monitor是原理和作用开始今天,我们来聊聊ReentrantLock和synchronized的相似与不同。都是阻塞ReentrantLock和synchronized都是加锁式同步,当一个线程获取了对象锁后,其它要进入同步块的线程就必须阻塞在同步块外等待。线程的...

Java 2020-03-01 PM 1458次 0条

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

线程通信之传统版生产者消费者模式使用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 1378次 0条

CyclicBarrier和Semaphore简介

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

Java 2020-02-27 PM 1394次 0条

countDownLatch简介

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

Java 2020-02-27 PM 1325次 0条

Java锁--公平和非公平锁

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

Java 2020-02-26 AM 1453次 0条

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

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

Java 2020-02-25 AM 1578次 0条

Java锁--自旋锁简介

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

Java 2020-02-24 AM 1441次 0条

Java锁--读写锁简介

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

Java 2020-02-23 AM 1524次 0条