Java 并发
任我行哟
蜗牛
展开
-
多线程-出现非线程安全的底层原因
一:什么是非线程安全 一提到多线程,有经验的程序员就会考虑线程安全问题,那在什么情况下会出现线程安全的问题呢? 很多人可以轻而易举的总结出:当多个线程同时竞争共享变量时会出现线程安全问题。 但是对于底层为什么会出现这种情况却不清楚了。二:非线程安全的源头 出现非线程安全的源头归因于:原子性、可见性、有序性。 2.1:导致原子性的源头: 很多初学者会认为i+...原创 2019-05-08 11:27:10 · 499 阅读 · 0 评论 -
多线程-JMM从底层解决线程安全
一:什么是JMM 从字面上理解JMM(Java Memory model)就是java定义了一个底层内存操作的一个抽象。 当多线程同时对共享变量进行操作时,会存在原子性,可见性,有序性问题。JMM抽象定义了每个线程有自己的本地内存,共享变量存在主内存中,JMM通过控制主内存与线程的本地内存的交互来保证线程之间的可见性。 通过抽象JMM可以让程序员使用JMM定义的规则合理的按需禁用...原创 2019-05-09 15:57:27 · 476 阅读 · 0 评论 -
多线程-synchronized深入分析
一:什么是synchronized synchronized是java关键字,初学者接触多线程,为了保证线程安全,接触的最多的应该是synchronized。 synchronized可以保证方法、代码块在运行时,同一时刻只有一个线程可以执行,基于happens-before的监视器锁规则可以推断出共享变量的可见性(happens-before规则概念前文有写)。 可以把s...原创 2019-05-14 15:45:56 · 140 阅读 · 0 评论 -
多线程-线程概念
一:进程与线程的区别 进程是资源分配的最小单位,线程是资源调度的最小单位。一个程序的生命周期,对应着进程的创建,运行,中止。进程拥有独立的地址空间,同一进程下的多个线程共享进程的地址空间。二:线程的生命周期如上图所示,线程有6个状态:分别是新建状态,就绪状态,运行状态,阻塞状态,等待状态,超时等待状态,中止状态。 新建状态:当new一个线程对象时,此时线程出于新建状...原创 2019-08-04 17:21:19 · 115 阅读 · 0 评论 -
JUC-AQS框架
一:什么是AQS AQS(AbstractQueuedSynchronizer)是JUC中的基础框架,例如ReentrantLock,CountDownLatch等组件都是基于AQS实现同步控制。二:AQS独占式获取和释放同步状态在了解AQS中线程如何获取同步状态前,需要了解Node类, AQS内部由一个双向队列实现对同步状态的管理,可以看成多生产者单消费者模型,当线程没有...原创 2019-08-05 13:29:01 · 285 阅读 · 0 评论 -
多线程-线程池深入分析
一:什么是线程池 在Java中new一个线程,除了在堆内存开辟一份空间、初始化一个对象外,还需要进行系统调用,操作系统为线程分配系统资源,当频繁的创建和销毁线程,导致的系统开销非常大,因此使用线程池对线程进行复用可以节省系统资源的开销。二:线程池的生命周期线程有五种状态:新建,就绪,运行,阻塞,死亡,线程池同样有五种状态:Running, SHUTDOWN, STOP, TIDYI...原创 2019-08-05 17:09:29 · 135 阅读 · 0 评论