
线程
文章平均质量分 94
striveb
趁年轻,多吃点苦吧
展开
-
java面试/笔试题目之多线程及锁 (持续更新中)
GitHub:https://github.com/JDawnF前言:这一模块可以参照徐刘根大佬的博客。目录一.线程和进程的概念、并行和并发的概念二.创建线程的方式及实现三.线程间通信的方式四.说说 CountDownLatch、CyclicBarrier 原理和区别五.说说 Semaphore 原理六.说说 Exchanger 原理七.ThreadLocal ...原创 2018-10-24 11:35:52 · 1554 阅读 · 0 评论 -
什么是悲观锁和乐观锁
一、何为悲观锁、乐观锁1、悲观锁顾名思义,就是比较悲观的锁,总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。Java中synchro...原创 2018-12-05 15:01:02 · 47437 阅读 · 2 评论 -
浅谈Fork/Join框架
前言:本文基于jdk1.7,jdk1.8与jdk1.7还是有些差别。一、什么是Fork/Join框架Fork/Join框架是Java 7提供的一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。简单来说,Fork就是把一个大任务切分为若干子任务并行的执行,Join就是合并这些子任务的执行结果,最后得到这个大任务的结果。比如计算1+2+...原创 2018-11-16 17:03:23 · 969 阅读 · 0 评论 -
深入理解java虚拟机之Java对象头
一.对象头包含的信息1.Mark Word:这一部分主要包括 存储对象自身的运行时数据,如哈希码(HashCode)、 GC分代年龄、 锁状态标志、 线程持有的锁、 偏向线程ID、 偏向时间戳等。注意这里的1bit,主要是表名是否是偏向锁,如果是0的话,表示是无锁,如果是1的话,表示是偏向锁。由于对象需要存储的运行时数据很多,其实已经超出了32位、64位Bitmap结构所能记录...原创 2018-11-08 16:47:11 · 1042 阅读 · 0 评论 -
Java多线程之Executor框架
在前面的这篇文章中介绍了线程池的相关知识,现在我们来看一下跟线程池相关的框架--Executor。一.什么是Executor1.Executor框架的两级调度模型在HotSpot VM的线程模型中,Java线程(java.lang.Thread)被一对一映射为本地操作系统线程。Java线程启动时会创建一个本地操作系统线程;当该Java线程终止时,这个操作系统线程也会被回收。操作系统会调...原创 2018-11-13 11:30:35 · 253 阅读 · 0 评论 -
Java中的线程池及其实现类ThreadPoolExecutor
前言:像我们连接数据库一样,需要不断地创建连接,销毁连接,如果都是人为地一个个创建和销毁的话会很费劲,所以就诞生了数据库连接池,线程池的产生也是同样的道理。线程池预先创建了若干数量的线程,并且不能由用户直接对线程的创建进行控制,在这个前提下重复使用固定或较为固定数目的线程来完成任务的执行。一.线程池的实现原理首先,我们先来看看线程池是怎么实现的。先来看下面这个图:这是线程池的工作流...原创 2018-11-09 17:47:46 · 1157 阅读 · 0 评论 -
线程之间的通信方式:wait/notify
1.什么是线程间的通信通信,顾名思义就是一种通知交通的方式,在多线程的环境下,如果各个线程之间可以互相通信的话,可以很好地提高工作效率,提高CPU的利用率。Java线程之间的通信由Java内存模型(本文简称为JMM)控制,JMM决定一个线程对共享变量的写入何时对另一个线程可见。从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存(Main Memory)...原创 2018-10-30 15:07:16 · 803 阅读 · 0 评论 -
多线程之可见性:volatile
一.什么是volatile,它的作用是什么我们知道线程安全的三大核心就是原子性、可见性和顺序性,synchronized可以实现原子性,而volatile就是来实现可见性。那么什么是可见性呢?我们知道,在现代计算机中,由于 CPU 直接从主内存中读取数据的效率不高,所以都会对应的 CPU 高速缓存,先将主内存中的数据读取到缓存中,线程修改数据之后首先更新到缓存,之后才会更新到主内存。如...原创 2018-10-30 11:34:33 · 2131 阅读 · 0 评论 -
多线程之join方法
一.前言: 在很多情况下,我们都是通过主线程创建并启动子线程的,如果子线程中需要耗费大量的时间计算的话,主线程往往会比子线程先结束,这个时候就会导致有时候主线程想获取子线程计算之后的结果,但是却获取不到。这个时候,我们就可以通过join方法来解决这个问题。二.join方法的作用:join方法的作用是使所属的线程对象x正常执行run()方法中的任务,而使当前线程z进行无限期的...原创 2018-10-31 16:43:16 · 9554 阅读 · 1 评论 -
什么是Lock?什么是ReentrantLock?ReentrantReadWriteLock又是啥?
ps:不要将获取锁的过程写在try块中,因为如果在获取锁(自定义锁的实现)时发生了异常,异常抛出的同时,也会导致锁无故释放。目录一.什么是Lock对象?二.使用ReentrantLock实现线程同步三.使用Lock对象实现线程间通信四. 使用Lock对象和Condition实现等待/通知实例五.使用Lock对象和多个Condition实现等待/通知实例六、公平锁和非公平...原创 2018-10-27 00:23:35 · 1623 阅读 · 1 评论 -
synchronized原理及其相关特性
写在前面:尽量不要使用 synchronized(String a) 因为在JVM中,字符串常量池具有缓冲功能!而这个会导致线程一直循环,因为String的引用只有一个,会导致只有一个线程不断循环执行。1.synchronizedsynchronized:可以在任意对象及方法上加锁,而加锁的这段代码称为互斥区或临界区。synchronized可以保证方法或者代码块在运行时,同一时刻只有...原创 2018-10-26 14:59:40 · 1707 阅读 · 0 评论 -
ThreadLocal原理详细解析
1.ThreadLocal概念ThreadLocal,可以叫做线程本地变量或线程本地存储,顾名思义就是ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。其实就是通过空间换时间的方式来取得对每个线程各自变量的共享。变量值的共享可以使用 public static 变量的形式,所有的线程都使用同一个被 public static 修饰的变量。Th...原创 2018-10-26 11:57:21 · 506 阅读 · 0 评论 -
spring与线程安全
https://blog.youkuaiyun.com/csdnlijingran/article/details/83094756转载 2019-02-18 18:57:09 · 1252 阅读 · 0 评论