线程
冰蛙ing
千帆驶尽回眸望,仍是初少年
展开
-
悲观锁和乐观锁
悲观锁的思想对线程并发持悲观态度,使用互斥锁的机制来解决并发问题乐观锁的思想是使用cas(compareAndSwapper)机制,不上锁,但也能解决并发问题int count=100;最后一次修改的时间戳或者版本号;1:先查询一下变量的值以及它的最后一次修改的时间戳;2:在本地修改变量的值3:对变量进行修改的时候,先比对一下最后一次修改的时间戳是否发生变化了,如果没发生变化,修改变量的值, 如果发生变化了,重试以上流程线程的使用场景: 1:项目当中使用线程池(注册完毕发邮件和短信)原创 2020-07-31 10:24:33 · 183 阅读 · 1 评论 -
多线程并发或线程安全问题如何解决?
1:通过volatile 关键字修饰变量,可以实现线程之间的可见性,避免变量脏读的出现,底层是通过限制jvm指令的重排序来实现的适用于一个线程修改,多个线程读的场景2:通过synchronized锁(任意对象)来实现线程同步,自动锁的思想,底层实现原理:当有线程进入同步代码块之后,利用jvm的计数器将锁的标记置为1,当别的线程再想进入的时候,发现锁的标记为1,该线程就去锁池等待,当第一个线程出来之后,锁的标记会置为0,之后cpu会随机分配一个线程再次进入同步代码块.3:通过lock锁的机制,原创 2020-07-30 15:59:57 · 1726 阅读 · 2 评论 -
线程的生命周期
新建状态(new一个线程的时候) 调用线程.start方法的时候,等待cpu分配时间片可运行状态 当cpu分配到了时间片之后,线程开始运行,运行run方法当中的内容运行状态 当线程遇到sleep、wait等方法的时候,线程会进入阻塞状态阻塞状态 当休眠时间到期,或者被notify了,线程又回到了可运行状态死亡状态 线程运行结束之后,就会销毁,被jvm的gc回收...原创 2020-07-31 10:21:36 · 168 阅读 · 1 评论 -
线程的5种状态详细描述
Java中的线程的生命周期大体可分为5种状态。**新建(NEW):**新创建了一个线程对象。**可运行(RUNNABLE):**线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu 的使用权 。**运行(RUNNING):**可运行状态(runnable)的线程获得了cpu 时间片(timeslice) ,执行程序代码。**阻塞(BLOCKED):**阻塞状态是指线程因为某种原因放弃了cpu 使用原创 2020-07-15 14:16:01 · 439 阅读 · 0 评论