Java并发编程
摸鱼小能手tay
这个作者很懒,什么都没留下…
展开
-
线程的几种状态(详细)
线程状态解释NEW初始状态,线程被构建,还没有调用start()方法RUUNABLE运行状态,就绪(执行了start方法)和运行(就绪状态线程获得cpu执行权,执行run方法)两种状态笼统的称作 运行中BLOCKED阻塞状态,表示线程阻塞于锁WAITING等待状态,需要等待其他线程TIME_WAITING超时等待状态,它可以在指定的时间自行返回TERMINATED终止状态,线程执行完毕线程创建之后,调用start()方法开始运行。当线程执...原创 2020-10-10 23:19:04 · 1344 阅读 · 0 评论 -
阻塞和非阻塞
同步异步关注的是消息通信机制阻塞非阻塞关注的是程序在等待结果调用时(消息、返回值)的状态阻塞调用:指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回非阻塞调用:指在不得立刻得到结果之后,该调用不会阻塞当前线程...原创 2020-09-24 11:18:27 · 441 阅读 · 0 评论 -
并发和并行
并发:是逻辑上同时发生,指在某一个时间内同时运行多个程序。并行:是物理上同时发生,指在某一个时间点同时运行多个程序。原创 2020-09-24 10:40:55 · 86 阅读 · 0 评论 -
同步和异步
-同步:发送一个请求,等待返回,再发送下一个请求。同步可以避免死锁、脏读的发生-异步:发送一个请求,不等待返回,随时可以再发送下一个请求。可以提高效率,保证并发原创 2020-09-24 10:28:48 · 118 阅读 · 0 评论 -
为什么要用到并发 并发的缺点
为什么要用到并发①充分利用多核CPU的运算能力②方便业务拆分并发的缺点①频繁的上下文切换②线程安全问题(常见的死锁)原创 2020-09-24 10:27:58 · 115 阅读 · 0 评论 -
进程与线程
一、进程:正在运行的程序,是系统进行资源分配和调用的独立单位。点击应用程序执行,进入到内存中,占用一些内存执行,进入到内存的程序叫进程二、线程:是进程中的单个顺序控制流,是一条执行路径。一个进程如果只有一条执行路径,则称为单线程程序。一个进程如果有多条执行路径,则称为多线程程序。...原创 2020-09-24 10:20:56 · 190 阅读 · 0 评论 -
避免死锁的几种常见方式
1、避免一个线程同时获取多个锁2、降低锁的使用粒度,尽量保证一个锁只占用一个资源3、JDK提供的并发包提供的并发容器和工具类4、尝试使用定时锁,使用lock.tryLock(timeout)来替代使用内部锁机制5、对于数据库锁,加锁和解锁必须在一个数据库连接里,否则会出现解锁失败的情况...原创 2020-08-06 17:58:27 · 1981 阅读 · 0 评论 -
volatile型变量的特殊规则
关键字volatile可以说是Java虚拟机提供的最轻量级的同步机制。当一个变量被volatile修饰后,①可以保证该变量对所有线程的可见性。(当一条线程修改了这个变量的值,新值对于其他线程来说是可以立即得知的)如果是普通变量,它的值在线程间传递时均需要通过主内存来完成。比如, 线程A修改一个普通变量的值,然后向主内存进行回写,另外一条线程B在线程A回写完成了之后再对主内存进行读取操作,新变量值才会对线程B可见。Java里面的运算操作符并非原子操作, 这导致volatile变量的运算在并发下是不安全的原创 2020-08-06 10:28:17 · 180 阅读 · 0 评论 -
内存间的交互
即变量如何从主内存拷贝到工作内存、从工作内存同步回主内存。Java内存模型中定义了8种操作来完成:1、lock(锁定):作用于主内存的变量,它把一个变量标识为一条线程独占的状态。2、unlock(解锁):作用于主内存的变量,它把一个处于锁定状态的变量释放出来,释放后的变量才可以被其他线程锁定。3、read(读取):作用于主内存的变量,它把一个变量的值从主内存传输到工作内存中,以便随后的load动作使用。4、load(载入):作用于工作内存的变量,它把read操作从主内存中得到的变量值放入工作内存的原创 2020-08-03 14:23:36 · 407 阅读 · 1 评论 -
Java内存模型
Java内存模型:主要目的是定义程序中各种变量的访问规则。即关注在Java虚拟机中把变量值存储到内存和从内存中取出变量值这样的底层细节。(这里的变量包括实例字段、静态字段、构成数组对象的元素;因为局部变量与方法参数是线程私有的,不会被共享,就不会存在竞争问题)Java内存模型规定了所有变量都存储在主内存。每条线程都有自己的工作内存,线程的工作内存中保存了被该线程使用的变量的主内存副本,线程对变量的所有操作都必须在工作内存中进行,而不能直接读写主内存数据。不同的线程之间也无法直接访问对方工作内存中的变量,线原创 2020-08-03 14:20:14 · 99 阅读 · 0 评论 -
什么是上下文切换?如何减少上下文切换?
什么是上下文切换?cpu给每个线程分配cpu时间片来执行代码,因为时间片非常短,所以cpu通过不停的切换线程执行,让我们感觉多个线程是同时执行的。cpu通过时间片分配算法来循环执行任务,当前任务执行一个时间片后会切换到下一个任务,但是在切换前会保存上一个任务的状态以便下次切换回这个任务时再次加载这个任务的状态。任务从保存机制再到加载的过程就是一次上下文切换。如何减少上下文切换?无锁并发编...原创 2020-04-25 14:53:32 · 356 阅读 · 0 评论