多线程
文章平均质量分 88
zz_ddup
这个作者很懒,什么都没留下…
展开
-
线程池
为什么使用线程池? 1.减少在创建和销毁线程上所花的时间以及系统资源的开销 2.如不使用线程池,有可能造成系统创建大量线程而导致消耗完系统内存public class ThreadPoolTest { /** * 1.固定大小的线程池: * 初始化一个指定线程数的线程池,其中corePoolSize == maximumPoolSize,使用LinkedB...翻译 2018-07-06 01:15:58 · 112 阅读 · 0 评论 -
synchronized
一.synchronized作用: 1.保持多线程下操作的互斥性 2.保证共享变量的修改及时可见性 3.有效解决重排序问题 二. 常用用法: 1.修饰普通方法,锁是当前类的实例对象 2.修饰静态方法,锁是当前类的Class对象 3.修饰代码块...原创 2018-04-15 22:20:20 · 521 阅读 · 1 评论 -
volatile
一.定义: volatile是相较于synchronized的轻量级锁,可保持数据的可见性,但是不能保证操作的原子性. volatile所修饰的变量是直接存在于主内存中的,线程对变量的操作也是直接反映在主内存中,所以说其是易变的。 JMM中的内存分为主内存和工作内存,其中主内存是所有线程共享的,而工作内存是每个线程独立分配的,各个线程的工作内存之间相互独立、互不可...原创 2018-04-16 12:01:58 · 127 阅读 · 0 评论 -
ReentrantLock详解
ReenTrantLock可重入锁和synchronized的区别 1)可重入性: 从名字上理解,ReenTrantLock的字面意思就是再进入的锁,其实synchronized关键字所使用的锁也是可重入的,两者关于这个的区别不大。两者都是同一个线程没进入一次,锁的计数器都自增1,所以要等到锁的计数器下降为0时才能释放锁。 2)锁的实现: Synchronized是依赖于JVM实现的...原创 2018-08-09 23:30:58 · 134 阅读 · 0 评论 -
Java多线程(二)线程的生命周期
1. 初始(NEW):新创建了一个线程对象,但还没有调用start()方法。2. 运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的成为“运行”。线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu 的使用权,此时处于就绪状态(ready)。就绪状态的线程在获得...原创 2018-07-09 16:28:35 · 115 阅读 · 0 评论 -
Java多线程(一)线程基础
定义 进程:一个计算机程序的运行实例,包含了需要执行的指令;有自己的独立地址空间,包含程序内容和数据;不同进程的地址空间是互相隔离的;进程拥有各种资源和状态信息,包括打开的文件、子进程和信号处理。 线程:是进程中的一个执行流程,是CPU调度执行的基本单位,一个进程中可以运行多个线程;线程有自己的程序计数器、寄存器、堆栈和帧。同一进程中的线程共用相同的地址空间,同时共享进进程锁拥有的内...原创 2018-07-06 01:05:53 · 104 阅读 · 0 评论 -
ReentrantReadWriteLock-读写锁
1.为什么使用读写锁 在Java并发包中常用的锁(如:ReentrantLock),基本上都是排他锁,这些锁在同一时刻只允许一个线程进行访问,而读写锁在同一时刻可以允许多个读线程访问,但是在写线程访问时,所有的读线程和其他写线程均被阻塞。读写锁维护了一对锁,一个读锁和一个写锁,通过分离读锁和写锁,使得并发性相比一般的排他锁有了很大提升。 在没有读写锁支持的(J...转载 2018-08-12 14:08:36 · 192 阅读 · 0 评论