
Java多线程并发笔记
记录学习多线程的过程
有机后浪
正在慢慢深入中。。。
展开
-
Java - 锁的四种状态及升级过程
JDK1.6的锁优化曾经遇到多线程加锁操作都是直接用synchronized,但在jdk1.6前,synchronized是重量级锁,随着jdk1.6对synchronized进行的各种优化后,synchronized并不会显得那么重如:偏向锁:偏向某一个线程的锁,这个线程将对象头markword的ThreadID改为自己的ID,之后再次访问这个对象的时候,只需要对比ID轻量级锁:不需要申请互斥量,只需要将markword中的指针指向线程的id,如果更新成功则表示已经成功的获取了锁,否则说.原创 2020-12-23 13:31:58 · 1039 阅读 · 0 评论 -
乐观锁的实现 - CAS、ABA问题及Java中原子操作类解析
乐观锁与悲观锁乐观锁与悲观锁是一种思想:悲观锁:悲观的认为当前环境并发严重,所以需要将共享资源锁住,共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程如synchronized的实现乐观锁:认为当前环境并发不严重,每次去拿数据的时候都认为别人不会修改,所以不上锁,共享资源所有线程都可以使用,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据如版本号机制和CAS算法实现很明显,乐观锁适合多读场景,悲观锁适合多写场景CAS算法CAS:Compare And S原创 2020-12-22 16:39:22 · 478 阅读 · 0 评论 -
Java多线程并发笔记(6)Future与Callable
前言当被Netty吊打时,又回来继续攀知识树CallableCallable很简单,和Runnable类似,都是用于启动线程的接口区别在与:Runnable没有返回值;Callable可以返回执行结果,是个泛型< V>,和Future、FutureTask配合可以用来获取异步执行的结果Callable接口的call()方法允许抛出异常;Runnable的run()方法异常...原创 2020-03-15 09:31:37 · 299 阅读 · 0 评论 -
Java多线程并发笔记(5)死锁案例与避免死锁
前言记录学习过程死锁是多线程并发中容易出现的问题有很多常见的死锁概念在操作系统中学过死锁的概念死锁:两个或两个以上的线程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去死锁的发生必须具备以下四个必要条件。互斥条件:指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用。如果此时还有其它进程请求资源,则请求者只...原创 2020-02-16 14:37:00 · 396 阅读 · 0 评论 -
Java多线程并发笔记(4)线程池
前言记录学习过程,仅作学习笔记前面已经学了线程与锁机制接下来学习对线程的管理 - 线程池,重点难点Java3y公众号的教程Java并发编程札记-(六)JUC线程池-02ThreadPoolExecutor实现原理目录概念Callable和FutureThreadPoolExecutor详解3.1. 属性3.2. 排队策略3.3. 构造方法3.4. 总结属性线程池状态...原创 2020-02-15 15:23:33 · 527 阅读 · 0 评论 -
Java多线程并发笔记(3)锁机制:synchronized、Lock显式锁
前言记录学习过程多线程的加锁机制:synchronized、Lock显式锁目录synchronizedLock显式锁AQS同步器ReentrantLockReentrantReadWriteLock总结synchronized前面分析执行控制时学了synchronized的使用synchronized是一个关键字,可以在方法或代码块上修饰修饰了后就会执行互斥机制,锁...原创 2020-02-14 21:16:32 · 268 阅读 · 0 评论 -
Java多线程并发笔记(2)并发的关键字:Volatile、synchronized详解
前言记录学习过程前面实现了线程与多线程的创建及一些操作方法;可以看出许多在单线程有用的方法到了多线程就会出各种错误;为了解决错误,多线程并发就有很多知识并发的关键字:Volatile、synchronized这个大佬的解释很深入目录线程安全1.1 Java内存模型(JMM)Volatilesynchronized区别线程安全许多单线程的程序到了多线程就会线程不安全...原创 2020-02-13 16:12:50 · 372 阅读 · 0 评论 -
Java多线程并发笔记(1.1)线程与线程的实现、启动
前言记录学习过程Java线程并发开发工具:IDEA环境:jdk1.8目录概念创建线程2.1.继承Thread类2.2.实现Runnable接口2.3.匿名内部类线程优先级线程的其他操作方法总结线程概念曾经在操作系统就学过相关概念操作系统是计算机的管理者,它负责任务的调度,资源的分配管理,硬件的使用,而我们评测编程的程序就是在操作系统之上运行的进程:就是一个...原创 2020-02-12 14:01:40 · 283 阅读 · 0 评论 -
Java多线程并发笔记(1.2)进程、线程知识补充
前言前面学了Java多线程并发(1.1)线程与线程的实现、启动,然后去看了许多资料,发现还有很多知识,不能简单的跳过,学习笔记还要继续补充线程知识线程在JVM中的存储一个进程中有多个线程,多个线程共享进程的堆和方法区资源,但是每个线程有自己的程序计数器和栈区域。程序计数器:是一块内存区域,用来记录线程当前要执行的指令地址 。栈:用于存储该线程的局部变量,这些局部变量是该线程私有的...原创 2020-02-12 22:17:11 · 250 阅读 · 0 评论 -
Java多线程并发笔记(1.3)多线程遇到的问题
前言记录学习过程我们可以通过Runnable接口创建线程,也可以实现多线程,接下来就需要实现线程安全线程安全:当一个类,不断被多个线程调用,仍能表现出正确的行为时,那它就是线程安全的而以前很多安全的代码到了多线程就会出问题线程不安全多线程是为了提高程序的使用率,然而会出现很多线程安全问题因为在多线程的环境下,线程是交替执行的,一般他们会使用多个线程执行相同的代码。如果在此相同的代码里...原创 2020-02-13 17:56:14 · 202 阅读 · 0 评论