+ Java多线程
文章平均质量分 75
这是自己学习多线程的笔记代码分享。主要内容有:
1.java多线程基础,Thread类的API使用
2.多线程对并发访问的控制
3.多线程之间的通信
4.定时器Timer的使用
5.并发访问的同步处理,读写锁等
youaresherlock
江湖人称狗哥!
展开
-
一文带你学会读写锁
import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReadWriteLock;import java.util.concurrent.locks.ReentrantReadWriteLock;public class ReadWritePractice { private static final ReadWriteLock lock = new ReentrantReadWriteLock();原创 2021-08-26 18:13:50 · 257 阅读 · 0 评论 -
Java多线程笔记详解
这是学习多线程知识的学习笔记,大家可以选择自己感兴趣的部分阅读学习详细代码见github代码 Java多线程学习笔记1之多线程基础内容:1) 基本概念以及线程的实现方法 Java多线程学习笔记2之多线程基础内容:1) 数据同步2) 非线程安全情况以及处理方法3) Java内存模型4) Thread.currentThread()抽象方法使用...原创 2018-10-09 15:50:42 · 555 阅读 · 0 评论 -
Java多线程学习笔记22之增补拾遗
详细代码见:github代码地址 第七章本章内容:1. 线程组的使用2. 如何切换线程的状态3. SimpleDateFormat类与多线程的解决方案4. 如何处理线程的异常线程的状态线程对象在不同的运行时期有不同的状态,状态信息就存在于State枚举类中。我们看看Thread的类中的枚举类State代码: /** * A thread st...原创 2018-11-05 22:55:52 · 193 阅读 · 0 评论 -
Java多线程学习笔记21之单例模式与多线程
详细代码见:github代码地址 第六章单例模式与多线程前言:我之前已经开设了23个设计模式这个专栏,介绍了很多的Java设计模式,其中一些模式对于绝大多数编程语言设计思想都是类似的,需要了解单例模式的可以去看看。我们在实际开发中经常用到单例模式,但是同时也配合多线程来使用,我们需要考虑的是如何使单例模式遇到多线程是安全的、正确的。单例模式:1. 单例类只能有一个...原创 2018-11-04 16:59:04 · 248 阅读 · 0 评论 -
Java多线程学习笔记20之定时器Timer
详细代码见:github代码地址 本节内容: 定时器Timer的使用及分析1) 如何实现指定时间执行任务2) 如何实现按指定周期执行任务 第五章定时器Timer定时/计划功能在移动开发领域使用较多,比如Android技术、定时计划任务功能在Java中的主要使用的就是Timer对象,它的内部还是使用多线程的方式进行处理,所以它和线程技术还是有很大的关...原创 2018-11-03 17:06:54 · 346 阅读 · 0 评论 -
Java多线程学习笔记19之Lock的使用
详细代码见:github代码地址 本节内容:ReentrantLock 方法讲解及ReentrantReadWriteLock读写锁详解5)awaitUninterruptibly()6) awaitUntil(Date deadline)4. 使用ReentrantReadWriteLock类 1) ReentrantReadWriteLock英文文档阅读...原创 2018-11-02 17:25:49 · 383 阅读 · 0 评论 -
Java多线程学习笔记18之Lock的使用
详细代码见:github代码地址 本节内容: 公平锁和非公平锁以及ReentrantLock常用方法的使用1) 公平锁和非公平锁2) getHoldCount()、getQueueLength()、getWaitQueueLength()3) hasQueueThread()、hasQueueThreads()、hasWaiters()4) lockInterr...原创 2018-10-31 23:24:24 · 410 阅读 · 0 评论 -
Java多线程学习笔记17之Lock的使用
详细代码见:github代码地址 本节内容:1) Lock/ReentrantLock的newCondition()方法及Condition类/await、signal方法文档翻译2) Condition实现等待/通知使用(错误示例及正确示例)3) 使用多个Condition实现通知部分线程4) 实现消费者和生产者模型(利用await()及signal()方法) ...原创 2018-10-30 17:00:42 · 592 阅读 · 0 评论 -
Java多线程学习笔记16之Lock的使用
详细代码见:github代码地址 本节内容:1) Lock接口/ReentrantLock类/lock()/unlock()方法文档翻译 翻译中包含了此重入锁与synchronized方法及语句块之间区别及优缺点2) 使用ReentrantLock实现同步第四章Lock的使用内容:Java5中的Lock对象也能实现同步的效果,而且在使用上也更加方便。...原创 2018-10-28 18:55:43 · 970 阅读 · 0 评论 -
Java多线程学习笔记15之线程间通信
详细代码见:github代码地址 本节内容:1)ThreadLocal类的使用 JDK文档及方法翻译 InheritableThreadLocal的使用 5.类ThreadLocal的使用变量值的共享可以使用public static变量的形式,所有的线程都使用同一个public static 变量。但是如何让每一个线程都有自己的共享变量该如何解决呢...原创 2018-10-27 23:06:06 · 230 阅读 · 0 评论 -
Java多线程学习笔记14之线程间通信
详细代码见:github代码地址 本节内容:1) 实战 等待/通知之交叉备份2) 方法join的使用(Jdk文档翻译及源码解析) join()及join(long)的使用和实现原理 join(long)和sleep(long)的区别及源码分析 (3) 实战 等待/通知之交叉备份创建20个线程,其中10个线程是将数据备份到A数据库中,另外10个线程将...原创 2018-10-27 22:51:35 · 219 阅读 · 0 评论 -
Java多线程学习笔记13之线程间通信
详细代码见:github代码地址 本节内容:1) 生产者消费者模型 多个生产者和多个消费者: 操作值假死及解决 多个生产者和多个消费者: 操作栈假死及解决2) 通过管道进行线程间通信 线程间常用的通信方式介绍 PipedInputStream和PipedOutputStream字节流/PipedReader和PipedWriter字符流...原创 2018-10-26 23:38:40 · 304 阅读 · 0 评论 -
Java多线程学习笔记12之线程间通信
详细代码见:github代码地址 本节内容:1) wait()锁释放与notify()锁不释放2) 当interrupt()方法遇到wait()方法3) notify()与notifyAll()使用4) 方法wait(long)的作用5) notify()方法通知过早6) 调用wait()方法的条件变化,造成逻辑混乱7) 生产者消费者模式, 一个生产者和一个消...原创 2018-10-24 11:02:24 · 226 阅读 · 0 评论 -
Java多线程学习笔记11之线程间通信
详细代码见:github代码地址 本节内容:1) 等待/通知机制概念2) 中断和轮询两种基本的方式3) 等待/通知机制的实现4) wait()/notify()/wait(long)/notifyAll()文档翻译 线程间通信线程是操作系统中独立的个体,使线程间进行通信后,系统之间的交互性会更强大,在大大提高CPU利用率的同时还会使程序员对各线程任务在处理...原创 2018-10-23 18:15:55 · 228 阅读 · 0 评论 -
Java多线程学习笔记10之对象及变量的并发访问
详细代码见:github代码地址 本节内容:1) volatile关键字2) volatile与synchronized关键字的比较3) 内存模型4) 原子性、有序性、可视性5)原子类提供原子操作 4. volatile关键字 volatile关键字的主要作用是使变量在多个线程间可见,它强制从公共堆栈中取得变量的值,而不是从线程私有数据栈中取得变...原创 2018-10-19 20:48:25 · 336 阅读 · 0 评论 -
Java多线程学习笔记9之对象及变量的并发访问
详细代码见:github代码地址 本节内容:1) 多线程死锁条件2) 成员内部类和静态内部类同步3) 锁对象改变和锁对象属性的改变 1.多线程的死锁Java线程死锁是一个经典的多线程问题,因为不同的线程都在等待根本不可能被释放的锁,从而导致所有的任务都无法继续完成。在多线程技术中,"死锁"是必须避免的,因为这会造成线程的"假死"Java死锁产生的四个必要条件:...原创 2018-10-19 20:34:56 · 247 阅读 · 0 评论 -
Java多线程学习笔记8之对象及变量的并发访问
详细代码见:github代码地址 本节内容:1) 静态同步synchronized方法与synchronized(class)代码块2) Class锁可以对类的所有对象实例起作用 3) 数据类型String的常量池特性 6) 细化验证3个结论"synchronized(非this对象x)"格式的写法是将x对象本身作为"对象监视器",这样就可以得出以下3个结论...原创 2018-10-16 22:20:27 · 247 阅读 · 0 评论 -
Java多线程学习笔记7之对象及变量的并发访问
详细代码见:github代码地址 本节内容:1) 出现异常,锁自动释放2) 同步不具有继承性3) synchronized同步语句块 synchronized方法的弊端 synchronized代码块间的同步性 将任意对象作为对象监视器 synchronized(非this对象x)同步代码块也可以解决"脏读"问题 7) 出...原创 2018-10-16 21:40:17 · 222 阅读 · 0 评论 -
Java中的"对象监视器Monitor"和"对象锁"
在JVM的规范中,有这么一些话: “在JVM中,每个对象和类在逻辑上都是和一个监视器相关联的” “为了实现监视器的排他性监视能力,JVM为每一个对象和类都关联一个锁” “锁住了一个对象,就是获得对象相关联的监视器” 监视器好比一做建筑,它有一个很特别的房间,房间里有一些数据,而且在同一时间只能被一个线程占据,进入这个建筑叫做"进入监视器",进入建筑中的...转载 2018-10-16 10:43:11 · 6425 阅读 · 1 评论 -
Java多线程学习笔记6之对象及变量的并发访问
详细代码见:github代码地址 本节内容:1) synchronized同步方法(线程安全和非线程安全、锁对象)2) 脏读3) synchronized锁重入 我们在学习了Thread类的一些基本方法的使用以及了解了一些方法废弃的原因之后,接下来我们来学习对对象及变量的并发访问。1. synchronized同步方法什么是线程安全与非线程安全?"非...原创 2018-10-14 19:42:06 · 220 阅读 · 0 评论 -
Why are Thread.stop, Thread.suspend and Thread.resume Deprecated?翻译
前面我们的学习笔记中讲解Thread类中一些废弃的方法及原因,同时又示例代码。现在我们来翻译官方给出的文档Why are Thread.stop, Thread.suspend and Thread.resume Deprecated?。 """本文是我学习Java多线程以及高并发知识的第一本书的学习笔记,书名是<<Java多线程编程核心技术>>,作者是大佬...原创 2018-10-11 13:04:59 · 875 阅读 · 1 评论 -
线程栈
在Java虚拟机进程中,每个线程都会拥有一个方法调用栈(线程栈),用来跟踪线程运行中的一系列方法调用过程,栈中的每一个元素被称为栈帧,每当线程调用一个方法的时候会向方法栈中压入一个新帧。这里的帧用来存储方法的参数、局部变量、方法的返回地址、和运算过程中的临时数据。 线程栈模型是理解线程调度原理以及线程执行过程的基础。线程栈是指某时刻时内存中线程调度的栈信息,当前调用的方法总是位...原创 2018-10-10 18:45:11 · 1877 阅读 · 0 评论 -
Java死锁产生的四个条件
死锁的四个条件:1. 互斥使用,即当资源被一个线程使用(占有)时,别的线程不能使用2. 不可抢占,资源请求者不能强制从资源占有者手中夺取资源,资源只能由资源占用者 主动释放3. 请求和保持,即当资源的请求者在请求其他的资源的同时保持对原有资源的占有4. 循环等待,即存在一个等待队列: P1占有P2的资源,P2占有P3的资源,P3占有P1的资源。 这样就形成了一个...原创 2018-10-10 18:33:17 · 3109 阅读 · 0 评论 -
线程和进程上下文切换区别
线程上下文切换和进程上下问切换一个最主要的区别是线程的切换虚拟内存空间依然是相同的,但是进程切换是不同的。这两种上下文切换的处理都是通过操作系统内核来完成的。内核的这种切换过程伴随的最显著的性能损耗是将寄存器中的内容切换出。 另外一个隐藏的损耗是上下文的切换会扰乱处理器的缓存机制。简单的说,一旦去切换上下文,处理器中所有已经缓存的内存地址一瞬间都作废了。还有一个显著的区...转载 2018-10-09 16:23:45 · 356 阅读 · 0 评论 -
高并发中原子性、可见性、有序性
线程安全包含原子性和可见性两个方面,Java的同步机制都是围绕这两方面来确保线程安全的。Java的内存模型是围绕着在并发过程之中如何处理原子性,可见性和有序性这三个特征来建立的。下面我们来谈谈原子性、可见性、有序性 原子性 由java内存模型来直接保证的原子性变量操作包括read,load,assign,use,store,write,我们大致可以认为基本数据类型的...原创 2018-10-10 18:16:23 · 826 阅读 · 0 评论 -
竞态条件(race condition)
在学习多线程的过程中,因为是非科班学生,操作系统的东西都是一知半解的,所以很多名词都没有理解,另外具体的Java虚拟机如何工作还需要后续的学习,这里只能慢慢学习了,等到这本书看完好好读读操作系统的东西以及Java虚拟机机制下面是一个博文讲解了竞态条件的基本概念和常见的情况竞态条件(Race Condition):计算的正确性取决于多个线程的交替执行时序时,就会发生竞态条件。最常见的竞态...转载 2018-10-09 10:12:15 · 1461 阅读 · 0 评论 -
Java中对象锁和类锁
Java中的锁:(简要描述)多线程的线程同步机制实际上是靠锁的概念来控制的。在Java程序运行时环境中,JVM需要对两类线程共享的数据进行协调:1)保存在堆中的实例变量2)保存在方法区中的类变量这两类数据是被所有线程共享的。(程序不需要协调保存在Java 栈当中的数据。因为这些数据是属于拥有该栈的线程所私有的。)别人讲的:Java内存管理:http://blog.csdn....转载 2018-10-08 17:09:46 · 155 阅读 · 0 评论 -
对象监视器锁、轻量级锁
转自blog.csdn.net/mxiangjian/article/details/53115146阅读本文,你可以了解到:1、对象监视器锁(重量级锁)、轻量级锁、偏向锁的含义2、它们之间的区别3、每一种锁的使用场景什么。 我们跟着一下几个问题一步一步深入了解:什么是对象监视器锁 为什么它叫重量级锁 我们知道在Java中实现同步的一种机制 是利用sync...转载 2018-10-08 13:06:17 · 247 阅读 · 0 评论 -
Java线程调度器
每个虚拟机都有一个线程调度器,确实在任何时刻运行哪个线程。有两种线程调度器:1、抢占式(preemptive)2、协作式(cooperative) 抢占式线程高度器确实线程何时已经公平地享用了CPU时间,然后暂停此线程上,将CPU控制权交给另外的线程。协作式线程调度器会在将CPU控制权交给其他线程前,等待运行中的线程自己斩停。与使用抢占式线程式调度的虚拟机相比,使用协作式线程调度器...原创 2018-09-28 11:32:28 · 4542 阅读 · 0 评论 -
Java多线程wait和sleep方法区别
两者的区别这两个方法来自不同的类分别是Thread和Object 最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法(锁代码块和方法锁)。 wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用(使用范围) sleep必须捕获异常,而wait,notify和notifyA...转载 2018-10-01 09:43:07 · 482 阅读 · 0 评论 -
Java多线程学习笔记5之多线程基础
详细代码见:github代码地址 本节内容:1) suspend与resume方法的缺点和代码案例2) yeild()方法的使用3) 线程的优先级详解4) java中的守护线程和用户线程 1. suspend与resume方法的缺点在使用suspend与resume方法时,如果使用不当,极易造成公共的同步对象的独占,使得其他线程无法访问公共同步对象...原创 2018-10-09 15:41:06 · 198 阅读 · 0 评论 -
Java多线程学习笔记4之多线程基础
详细代码见:github代码地址 本节内容:1) 判断线程是否是停止状态(Thread.interrupted()、this.isInterrupted()方法)2) 通过抛出异常或者return来真正停止线程3) stop()方法暴利停止线程以及它被废弃原因4) 一对方法来暂停和恢复线程(suspend()和resume()) 1. 我们可以判断一下线程是否是...原创 2018-10-01 10:04:55 · 237 阅读 · 0 评论 -
Java多线程学习笔记3之多线程基础
详细代码见:github代码地址 本节内容:1) Thread类中的isAlive()、sleep()、getId()、停止线程的方法(interrupt())、2) interrupted()方法和isInterrupted()方法区别和使用 isAlive()方法判断当前的线程是否处于活动状态 public final boolean isAlive()...原创 2018-09-30 11:42:45 · 291 阅读 · 0 评论 -
Java多线程学习笔记2之多线程基础
详细代码见:github代码地址本节内容:1) 数据同步2) 非线程安全情况以及处理方法3) Java内存模型4) Thread.currentThread()抽象方法使用 实例变量与线程安全自定义线程类中的实例变量针对其他线程可以有共享和不共享之分,这在多个线程之间交互时是很重要的一个技术点。 数据不共享情况:package chapter0...原创 2018-09-28 20:48:35 · 320 阅读 · 2 评论 -
Java多线程学习笔记1之多线程基础
本文是我学习Java多线程以及高并发知识的第一本书的学习笔记,书名是<<Java多线程编程核心技术>>,作者是大佬企业高级项目经理高洪岩前辈,在此向他致敬。我将配合开发文档以及本书和其他的博客奉献着的文章来学习,同时做一些简单的总结。有些基础的东西我就不细分析了,建议以前接触过其他语言多线程或者没有系统学习过多线程的开发者来看。另外需要注意的是,博客中给出...原创 2018-09-28 15:12:35 · 310 阅读 · 0 评论