并发知识
文章平均质量分 85
1*null
喜欢可爱的女孩子,喜欢学习,喜欢敲代码
展开
-
深入理解java之线程池
我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁的创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。那么有没有一种方法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务?在Java中可以通过线程池来达到这样的效果。今天我们就来详细讲解...转载 2018-03-11 22:28:07 · 233 阅读 · 0 评论 -
AQS
AbstractQueuedSynchronizer(AQS),类如其名,抽象的队列式同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步器实现都依赖于它,如ReentrantLock、CountDownLatch等。它维护了一个volatile int state(代表共享资源)和一个FIFO线程等待队列(多线程争用资源被阻塞时进入此队列)。state的访问方式有三种:get...转载 2018-08-15 20:04:14 · 514 阅读 · 0 评论 -
Lock锁
我们在介绍Lock锁之前先介绍锁的几个概念。1. 可重入锁如synchronized和ReentrantLock都是可重入锁,可重入性实际上表明了锁的分配机制:基于线程的分配,而不是基于方法调用的分配。当一个线程执行到某个synchronized方法时,如method1方法,而在method1中会调用另一个synchronized方法method2,此时线程不必重新去申请锁,而是可以直接执行met...原创 2018-06-01 17:13:57 · 1210 阅读 · 0 评论 -
ThreadLocal的理解
ThreadLocal(线程本地变量)ThreadLocal不是用来解决共享对象访问的,而主要是提供了保持对象的方法和避免参数传递的方便的对象访问方式。在每个线程内部都有对目标资源的“副本”。每个线程对自己内部的资源进行修改,不影响别的线程中该资源的状态。1. 每个线程中都有一个自己的ThreadLocalMap类对象,可以将线程自己的对象保存到其中,各管各的,线程可以正确访问到自己的对象。2. ...原创 2018-05-31 22:09:48 · 364 阅读 · 0 评论 -
线程的生命周期
我们可以从java的Thread.State中发现线程有六种状态。分别是:NEW:至今尚未启动的线程状态RUNNABLE:可运行的线程的线程状态,包括正在运行的线程和就绪的线程。BLOCKED:受阻塞并且正在等待监视器锁的某一线程的线程状态。WAITING:某一等待线程的线程状态。TIMED_WAITING:具有指定等待时间的某一线程的线程状态。TERMINATED:以终止...原创 2018-04-05 18:43:54 · 144 阅读 · 0 评论 -
进程和线程
进程和线程的区别:(1) 进程是资源的分配和调度的一个独立单元,而线程是CPU调度的基本单元。(2) 同一个进程中可以包括多个线程,并且线程共享整个进程的资源,一个进程至少包括一个线程。(3) 进程结束后她拥有的所有线程都将销毁,而线程的结束不会影响同个进程中的其他线程的结束。(4) 线程是轻量级进程,它的创建和销毁所需要的时间比进程小很多。(5) 线程中执行一般都要进行同步和互斥,因为他们共享同...原创 2018-04-04 18:42:08 · 107 阅读 · 0 评论 -
对volatile关键字的理解
转自:http://www.importnew.com/18126.htmlvolatile关键字我们经常在java并发编程中见到,和volatile经常提到的也有synchronized关键字,这两个关键字都是和java并发有很紧密的关系,我们今天就先说一下volatile关键字。volatile关键字和java内存模型有关,所以我们在了解volatile关键字之前先要了解一下java内...转载 2018-03-02 20:41:03 · 214 阅读 · 0 评论 -
Synchronized的锁优化
高效并发是从JDK1.5到JDK1.6的一个重要改进,HotSpot虚拟机开发团队在这个版本上花费了大量的精力去实现各种锁优化技术,如适应性自旋、锁消除、锁粗化、轻量级锁和偏向锁等,这些技术都是为了在线程之间更高效的共享数据,以及解决竞争问题,从而提高程序的执行效率。自旋锁与自适应自旋 我们在讨论互斥同步的时候,提到了互斥同步对性能最大的影响是阻塞的实现,挂起线程...原创 2018-03-31 19:35:41 · 886 阅读 · 0 评论 -
什么是CAS机制?
我们先看一段代码:启动两个线程,每个线程中让静态变量count循环累加100次。最终输出的count结果一定是200吗?因为这段代码是非线程安全的,所以最终的自增结果很可能会小于200。我们再加上synchronized同步锁,再来看一下。加了同步锁之后,count自增的操作变成了原子性操作,所以最终输出一定是count=200,代码实现了线程安全。虽然synchronized...转载 2018-03-12 18:28:16 · 96038 阅读 · 97 评论 -
悲观锁和乐观锁
首先介绍一下乐观所和悲观锁:悲观锁:总是假设最坏的情况,每次都去拿数据的时候都会认为别人会修改,所以每次在拿数据的时候都会加上锁,这样别人想拿这个数据就会阻塞知道它拿到锁。传统的关系型数据库里面就用到了很多这种锁机制,如行锁,表锁等,读锁,读写锁等,都是在做操作之前先上锁。再比如java里面的同步原语synchronized关键字的实现也是悲观锁。java在JDK 1.5 之前都是靠synchro...转载 2018-03-12 17:01:46 · 178 阅读 · 0 评论 -
JAVA线程实现原理、线程状态
JAVA线程现在的实现是基于操作系统原生线程模型来实现的。因此,现在操作系统支持怎样的线程模型,在很大程度上决定了JAVA虚拟机的线程是怎样映射的。这点在不同的平台上没有办法达成一致。对于Sun JDK来说,它的Windows版和Linux版都是使用一对一的线程模型实现的,一条Java线程就映射到一条轻量级进程中,因为Windows和Linux系统提供的线程模型就是一对一的。Java线程调...原创 2018-08-20 14:24:27 · 4757 阅读 · 0 评论