
多线程系列
解密多线程
因努力 果随缘
一个有故事的程序员
展开
-
Synchronized详解
1:如果在普通方法上加上Synchronized 当前this锁。2:如果在静态方法上加上Synchronized 当前calss字节码3:也可以自定义锁对象我们站在汇编的角度去分析Synchronized关键字原理public class Demo2 extends Thread{ //定义一个锁对象 private Object lockObject = new Object(); @Override public void run() {原创 2022-05-03 10:49:00 · 413 阅读 · 0 评论 -
CAS无锁机制
为什么会出现CAS无锁机制这个概念:我们先来说说原创 2022-03-07 14:02:46 · 409 阅读 · 0 评论 -
事务的概念
保证数据的一致性,acid原则:Spring事务分类:编程事务和声明事务编程事务:手动事务声明事务:自动事务 注解或者扫包的形式事务原理: Begin -- 触发行锁机制 获取锁的权限Commit原创 2022-02-22 21:27:01 · 139 阅读 · 0 评论 -
volatile关键字解析
volatile三大特性,可见性,顺序,不保证原子性如何理解多核多线程如鬼是单核的Cpu的情况下,Cpu在同一个时刻只能执行一个线程。存在切换过程 底层并不是真正多线程。什么叫能够保证线程的可见性了,当一个线程在修改我们主内存中的共享变量数据的时候,能够对另外一个线程可见。为什么会产生线程可见性原因:如果cpu每次直接访问主内存的共享变量的数据,访问的效率比较低,所以cpu采用高速缓存,高速缓存主要缓存我们主内存共享变量中的数据副本。...原创 2022-01-22 20:39:37 · 279 阅读 · 0 评论 -
mysql中的行锁概念
在mysql中多个线程对同一行数据做写的操作的时候,默认会触发行锁的机制,最终只有一个线程才能对该行数据做写的操作,其他的线程会被等待。原创 2022-01-16 20:03:28 · 482 阅读 · 0 评论 -
悲观锁和乐观锁
为什么需要锁:考虑线程安全的问题当多个线程在同时共享到同一个全局变量做写的操作的时候,可能会受到其他线程的干扰。这个时候就需要考虑上锁了,让多个线程同时抢购同一把锁,只要谁能够抢锁成功,谁就可以执行我们的代码,如果没有抢到锁的情况下,当前线程变为阻塞状态,一般的情况下只有做写的时候才会上锁,写包括:update del insert 查询就不需要了。我们就来说说悲观锁与乐观锁:...原创 2022-01-16 18:02:07 · 514 阅读 · 0 评论 -
如何停掉一个线程
public class TestDemo extends Thread{ @Override public void run() { //要执行的代码 while(true){ } } public static void main(String[] args) { new TestDemo().start(); System.out.println(Thread.currentThre.原创 2022-01-16 13:08:35 · 194 阅读 · 0 评论 -
详解cas锁
传统sysnchronized锁缺陷:悲观:如果没有获取到锁的情况下,会让当前的线程变为阻塞的状态,释放cpu执行权。效率非常低。原创 2021-09-10 11:56:00 · 251 阅读 · 0 评论 -
多线程之join()详解
为什么要使用join.使用join能够保证线程的顺序问题,比如现在有 A和 B两个线程,如果B线程调用A.join方法,则必学先让A线程执行完毕,才能执行B线程,底层通过通过wait和notify实现,核心思想,保证执行顺序。我们来写个案列演示下:...原创 2021-08-28 17:21:41 · 3554 阅读 · 0 评论 -
多线程之通讯技术
如上图所示,一个线程做写操作,一个线程做读操作。生产者生产一个,消费者消费一个,原创 2021-08-26 09:20:53 · 84 阅读 · 0 评论 -
重入锁的概念
锁都具有可重入性如果锁不具有可重入性的情况下,则可能会发生死锁,当线程如果一旦获取到锁之后,再次请求获取该锁的时候可以直接获取。注意,只是在当前线程里面。public class ThreadDemo implements Runnable{ @Override public void run() { System.out.println(Thread.currentThread().getName()+"我是子线程"); a(); }原创 2021-08-21 09:21:05 · 93 阅读 · 0 评论 -
如何解决线程安全问题
产生背景:同时做写的操作核心思想,在同一个时刻,只能有一个线程执行。如何解决了,只要加上锁就行。Lock 锁,synchronized,CAS,无锁,手写乐观锁。那么这个时候整个程序就变成单线程执行。对程序效率执行非常低。synchronized加锁之后如何保证线程安全问题。再多个线程中,同时执行同一个方法的时候,必须要获取锁,只有获取到锁的情况下,才可以进入到该方法执行。举个例子:如果A线程获取到锁的情况下,那么B线程就会一直阻赛等待,整个过程是一个悲观锁。必须要等待A线程执行玩代原创 2021-08-21 08:30:01 · 86 阅读 · 0 评论 -
多线程之线程安全问题
今天就来讲讲多线程之线程安全问题,原创 2021-07-15 06:26:34 · 274 阅读 · 0 评论 -
Lock锁与Synchronized锁的区别
Synchronzied属于我们java中内置关键字,底层jdk帮我们封装好了,lock是基于aqs封装的锁。Synchronzied可以理解为自动挡,当代码运行完毕,或者程序抛出异常的情况下才会释放锁。Lock:可以完全人为控制获取锁,释放锁,扩展性非常高。...原创 2020-07-04 21:17:10 · 381 阅读 · 0 评论 -
synchroized锁的使用注意事项
Synchronized使用注意事项代码块的形式(1)使用到Synchronized锁的时候可以使用任意对象作为锁。 Object obj = new Object(); public void test(){ synchronized (obj){ try { Thread.sleep(50); } catch (InterruptedException e) { ...原创 2020-07-04 20:34:01 · 460 阅读 · 0 评论 -
多线程的五种状态
新建 就绪 运行 阻塞 死亡原创 2020-06-26 21:17:12 · 141 阅读 · 0 评论 -
一分钟了解 用户线程与守护线程的区别
区别:用户线程:当我们主线程停止掉后,用户线程不会随着主线程停止。 守护线程:当我们主线程停止掉后,守护线程也会跟着停止。 java默认情况创建的线程都是用户线程。 代码演示:public class Test001 { public static void main(String[] args) { Thread thread = new Thread(() -> { try { ...原创 2020-06-26 20:59:51 · 487 阅读 · 0 评论 -
多线程有哪些创建的方式
(1)继承hread类,重写run方法/** * 继承Thread类 */public class ThreadTest01 extends Thread{ /** *就是在run方法中写线程需要执行的代码 */ @Override public void run() { System.out.println(Thread.currentThread().getName()+",子线程"); } public s.原创 2020-06-26 20:20:34 · 298 阅读 · 0 评论 -
如何理解CPU切换线程概念
对于如果使用单核cpu服务器,开启多线程的情况下,并不是真正意义上的多线程,因为单核cpu服务器在同一个时刻最多只能运行一个线程,当正在运行的线程快速切换到另外一个线程执行,这个过程我们可以称之为Cpu切换。...原创 2020-06-22 21:10:51 · 1393 阅读 · 0 评论 -
多线程一些详解
使用多线程有哪些好处:能够帮助我们提高程序的运行效率。多线程有哪些运用场景:异步的实现发送短信,异步的实现记录日志,对我们后端接口中比较耗时间的代码都可以采用异步实现。都采用的是同一个思想,快速提高Http协议的响应,对用户的体验就非常好。我们再想想:后端开发为什么需要使用到多线程因为我们的httpp协议默认的情况采用同步的形式,整个过程都是基于请求与响应过程,如果服务器端没有及时的响应给客户端的情况下,就会造成我们浏览器或者客户端一直等待,这样对我们用户体验是非常不友好的。单线原创 2020-06-22 20:48:17 · 111 阅读 · 0 评论 -
什么是进程,什么是线程,什么是多线程
什么是进程:当我们只要启动一个应用程序的时候,就会开启一个进程。怎么查看了:win系统只要右键点击屏幕下方,打开任务管理器就业以看到当前所有进程。 Linux: 命令ps 结束进程命令:kill - 9在进程中至少要有一条线程,该线程就是为主线程,进程就是我们所有线程集合。什么是线程:线程就是一条程序执行的路径,在进程中开启一条线程执行我们的程序代码。程序执行顺序必须遵循从上往下的顺序。注意:如果是多线程的情况下,代码执行的顺序就...原创 2020-06-21 09:57:27 · 249 阅读 · 1 评论 -
多线程讲解系列三
今天我们就来讲讲run()方法与start()方法的区别:通常情况下,系统通过调用线程类的start()方法来启动一线程,此时该线程处于就绪状态,而非运行状态,也就意味着这个线程可以被jvm来调度执行,在调度过程中,jvm通过调用线程类的run()方法来完成实际的操作,当run()方法结束后,此线程就会终止。如果直接调用线程类的run()方法,这会被当做一个普通的函数调用,程序中任然只有主...原创 2020-04-05 12:48:27 · 99 阅读 · 0 评论 -
多线程讲解系列二
java虚拟机允许应用程序并发的运行多个程序,在java语言中,多线程实现可以有以下三种方法(1)继承Thread类,重写run()方法Thread本质上也是实现了Runnable接口的一个实列。它代表一个线程的实列,并且,启动线程的唯一方法就是通过Thread类的start()方法,start()方法是一个native(本地)方法,它将启动一个新线程,并执行run()方法(Thread中...原创 2020-04-05 10:13:43 · 105 阅读 · 0 评论 -
多线程讲解系列一
线程是指程序在执行过程中,能够执行程序代码的一个执行单元,在java语言中,线程有4种状态:运行,就绪,挂起和结束。进程是指一段正在执行的程序,而线程有时也被称为轻量级进程,它是程序执行的最小单元,一个进程可以拥有多个线程,各个线程之间共享程序的内存空间(代码段,数据段和堆空间)及一些进程级的资源(列如打开的文件),但是各个线程拥有自己的栈空间,进程与线程的对比关系如图在操作系统...原创 2020-03-22 19:47:40 · 206 阅读 · 0 评论