多线程
文章平均质量分 92
有鹿如溪
可以内推各互联网公司,找工作的朋友可以关注私信我
展开
-
bat 等大厂常问的Java多线程面试题,3万字解析
1 基本概括2 文章详情1.1 Java基础——Java多线程(进程与线程的介绍)1.2 Java基础——Java多线程(线程的创建方式)1.3 Java基础——Java多线程(什么是进程?)1.4 Java基础——Java多线程(什么是线程?)1.5 Java基础——Java多线程(什么是线程池?)1.6 Java基础——Java多线程(什么是线程安全?)1.7 Java基础——Java多线程(多线程死锁问题)1.8 Java基础——Java多线程(ThreadLo原创 2021-08-13 16:49:42 · 508 阅读 · 0 评论 -
Java多线程(15)——多线程常见的锁
1 基本概括2 主要介绍2.1 乐观锁 VS 悲观锁2.1.1 悲观锁定义总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。在Java中,synchronized从偏向锁、轻量级锁到重量级锁,全是悲观锁。JDK提供的Loc原创 2021-08-11 14:36:09 · 655 阅读 · 0 评论 -
Java多线程(14)——Lock接口详解
1 基本概括2 主要介绍2.1 Lock接口的作用2.1.1 简单介绍锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源,解决数据的一致性问题。在Lock接口出现之前,Java程序是靠synchronized关键字实现锁功能的,而Java SE 5之后,并发包中新增了Lock接口(以及相关实现类)用来实现锁功能,它提供了与synchronized关键字类似的同步功能,只是在使用时需要显式地获取和释放锁。虽然它缺少了隐式获取释放锁的便捷...原创 2021-08-10 09:40:51 · 363 阅读 · 0 评论 -
Java多线程(13)——synchronized优化
1 基本概括2 主要介绍2.1 锁的优化的五种方法锁优化的思路和方法有以下几种:减少锁持有时间减小锁粒度锁分离锁消除2.1.1 减少锁持有时间减小锁的持有时间是为了降低锁的冲突的可能性,提高体系的并发能力。1) 只在必要时进行同步加锁操作例如下面的代码:在加锁时先判断是否满足同步代码逻辑的要求,以达到减小锁的占有几率的目的// 使用条件判断减少锁持有时间提高效率。public void matcher(Char input) { if (!co原创 2021-08-10 01:06:50 · 180 阅读 · 0 评论 -
Java多线程(12)——synchronized详解
1 基本概括2 主要介绍2.1 同步概念2.1.1 对象的内存布局1 实例数据:存放类的属性数据信息,包括父类的属性信息;2 对齐填充:由于虚拟机要求 对象起始地址必须是8字节的整数倍。填充数据不是必须存在的,仅仅是为了字节对齐;3 对象头:Java对象头一般占有2个机器码(在32位虚拟机中,1个机器码等于4字节,也就是32bit,在64位虚拟机中,1个机器码是8个字节,也就是64bit),但是 如果对象是数组类型,则需要3个机器码,因为JVM虚拟机可以通过Java对象的元数原创 2021-08-09 02:16:08 · 1007 阅读 · 0 评论 -
Java多线程(11)——volatile详解
1 基本概括2 主要介绍2.1 Java内存模型(JMM)JMM(Java Memory Model)Java内存模型,是java虚拟机规范中所定义的一种内存模型。Java内存模型(Java Memory Model)描述了Java程序中各种变量(线程共享变量)的访问规则,以及在JVM中将变量存储到内存和从内存中读取变量这样的底层细节。所有的共享变量都存储于主内存。这里所说的变量指的是实例变量和类变量。不包含局部变量,因为局部变量是线程私有的,因此不存在竞争问题。每一个线程还存在自己原创 2021-08-08 04:49:50 · 686 阅读 · 0 评论 -
Java多线程(10)——线程与进程的通信方式
1 基本概括2 主要介绍2.1 进程通信和线程通信的概念进程通信进程相互交换数据与信息。进程间通信有两种基本模型:共享内存和消息传递(消息队列)。线程通信原因:为了更好地协作,线程无论是交替式执行,还是接力式执行,都需要进行通信告知。线程间通信:(1)临界区通过多线程的串行化允许线程对共享资源的访问,速度快(2)互斥量只有拥有互斥对象的线程才能对资源空间进行访问,因为互斥对象只有一个,所以可以保证公共资源不被多个线程访问(3)信号量用于控制多个线程对共原创 2021-08-07 03:17:00 · 1321 阅读 · 0 评论 -
Java多线程(9)——ThreadLocal详解
1 基本概括2 主要介绍2.1 ThreadLocal的简单介绍ThreadLocal是线程变量,即ThreadLocal中填充的变量属于当前线程,该变量对其他线程而言是隔离的。ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。数据隔离的本质:Thread内部持有ThreadLocalMap对象,创建的副本都是存在这里,所以每个线程之间就 实现了隔离2.2 ThreadLocal的作用1、在进行对象跨层传递的时候,使用ThreadL原创 2021-08-03 02:42:35 · 563 阅读 · 0 评论 -
Java多线程(8)——多线程死锁问题
1 基本概括2 主要介绍2.1 死锁的概念所谓死锁,是指多个进程在运行过程中因争夺资源而造成的一种僵局。当进程处于这种僵持状态时,若无外力作用,它们都将无法再向前推进。2.2 死锁产生的原因1) 系统资源的竞争通常系统中拥有的不可剥夺资源,其数量不足以满足多个进程运行的需要,使得进程在 运行过程中,会因争夺资源而陷入僵局,如磁带机、打印机等。只有对不可剥夺资源的竞争 才可能产生死锁,对可剥夺资源的竞争是不会引起死锁的。2) 进程推进顺序非法进程在运行过程中,请求和释放资源原创 2021-08-02 18:05:52 · 1338 阅读 · 0 评论 -
Java多线程(6)——什么是线程安全?
1 基本概括2 主要介绍2.1 线程安全的概念当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象就是线程安全的。2.2 多线程编程的三个概念2.2.1 原子性这一点,跟数据库事务的原子性概念差不多,即一个操作(有可能包含有多个子操作)要么全部执行(生效),要么全部都不执行(都不生效)。2.2.2 可见性这一点,跟数据库事务的原子性概念差原创 2021-08-02 02:23:01 · 541 阅读 · 0 评论 -
Java多线程(5)——线程池
1 基本概括2 主要介绍2.1 线程池的概念线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。线程池内部结构 :1.线程池管理器:负责线程创建、销毁、添加任务等;2.工作线程: 线程池创建的正在工作的线程;3.任务队列( BlockingQueue ):线程满了之后,可以放到任务队列中,起到一定的缓冲;4.任务:要求实现统一的接口,方便处理和执行;2.2 线程池的优点可以将任务的提交和执行策略解耦,便原创 2021-08-01 02:08:02 · 426 阅读 · 0 评论 -
Java多线程(3)——什么是线程?
1 基本概括2 主要介绍2.1 线程的概念现在的操作系统是多任务操作系统。多线程是实现多任务的一种方式。进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。比如在Windows系统中,一个运行的exe就是一个进程。线程是指进程中的一个执行流程,一个进程中可以运行多个线程。我们来理解一下下面几个问题:2.1.1 为啥有了进程还要有线程有了线程以后,凡是程序涉及到多线任务时,都使用多线程来实现,使用多线程来实现时,线程间的原创 2021-07-31 03:53:05 · 197 阅读 · 0 评论 -
Java多线程(2)——什么是进程?
1 基本概括2 主要介绍2.1 进程的概念进程是操作系统结构的基础;是一个正在执行的程序;计算机中正在运行的程序实例;可以分配给处理器并由处理器执行的一个实体;由单一顺序的执行显示,一个当前状态和一组相关的系统资源所描述的活动单元。第一,进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈(stack region)。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的原创 2021-07-30 02:27:38 · 204 阅读 · 0 评论