多线程
一页知秋否
男人就不应该生活的太安逸
展开
-
线程、多线程之锁的简述
1. 概述 今天说的是无锁、偏向锁、轻量级锁、重量级锁。要注意的是,这四种状态都不是Java语言中的锁,而是Jvm为了提高锁的获取与释放效率而做的优化(使用synchronized时)的锁。在Java1.5之前synchronized是一个重量级锁,Java 1.6对synchronized进行的各种优化后,synchronized并不会显得那么重了。 了解这个几个锁之前希望大家对自旋锁,和java对象有一定了解,我就简单介绍下。1.1 自旋锁 ...原创 2020-07-01 11:19:36 · 274 阅读 · 0 评论 -
线程、多线程之ThreadLocal简述
1. ThreadLocal简介1.1ThreadLocal概述 通常情况下,我们创建的变量是可以被任何一个线程访问并修改的。如果想实现每一个线程都有自己的专属本地变量该如何解决呢?JDK中提供的ThreadLocal类正是为了解决这样的问题。ThreadLocal类主要解决的就是让每个线程绑定自己的值,可以将ThreadLocal类形象的比喻成存放数据的盒子,盒子中可以存储每个线程的私有数据。如果你创建了一个ThreadLocal变量,那么访问这个变量的每个线程都会有...原创 2020-06-30 10:48:16 · 584 阅读 · 0 评论 -
线程、多线程之Atomic 简述
1. 介绍一下Atomic 原子类 Atomic 翻译成中文是原子的意思(事务的四个特性ACID,其中A就是原子性)。在化学上,我们知道原子是构成一般物质的最小单位,在化学反应中是不可分割的。在我们这里 Atomic 是指一个操作是不可中断的。即使是在多个线程一起执行的时候,一个操作一旦开始,就不会被其他线程干扰。所以,所谓原子类说简单点就是具有原子/原子操作特征的类。并发包java.util.concurrent的原子类都存放在java.util.concurrent.atomi...原创 2020-06-17 17:10:54 · 1023 阅读 · 0 评论 -
线程、多线程之volatile关键字
1. 讲一下Java内存模型 在 JDK1.2 之前,Java的内存模型实现总是从主存(即共享内存)读取变量,是不需要进行特别的注意的。而在当前的 Java 内存模型下,线程可以把变量保存本地内存(比如机器的寄存器,线程私有)中,而不是直接在主存中进行读写。这就可能造成一个线程在主存中修改了一个变量的值,而另外一个线程还继续使用它在寄存器中的变量值的拷贝,造成数据的不一致。 要解决这个问题,就需要把变量声明为volatile,这就指示 JVM,这个变量是不稳定的,每次有线...原创 2020-06-12 17:50:28 · 246 阅读 · 0 评论 -
线程、多线程之synchronized关键字
1.synchronized关键字简述 synchronized关键字解决的是多个线程之间访问资源的同步性,synchronized关键字可以保证被它修饰的方法或者代码块在任意时刻只能有一个线程执行。 在 Java 早期版本中,synchronized属于重量级锁(获取锁和释放锁的过程及其消耗性能),效率低下,因为监视器锁(monitor)是依赖于底层的操作系统的 Mutex Lock 来实现的,Java 的线程是映射到操作系统的原生线程之上的。如果要挂起或者唤醒一个线程...原创 2020-06-12 17:40:09 · 344 阅读 · 0 评论 -
线程、多线程之面试问题总结
1.线程和进程的区别?答:进程:进程指正在运行的程序。确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能。线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序。简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程原创 2017-09-04 14:47:30 · 380 阅读 · 0 评论 -
Java多线程简述(3)_volatile是如何实现可见性和有序性
主内存与工作内存 java内存模型规定了所有的变量都存储在住内存。每条线程还有自己的工作内存,线程的工作内存中保存了被改线程使用到的变量的主内存副本拷贝。线程对变量的所有操作都必须在工作内存中进行,而不能直接读写主内存中的变量。不同线程之间也无法直接访问对方工作内存中的变量,线程间变量传递均需要通过主内存来完成。当多个线程操作的变量涉及到同一个主内存区域,将可能导致各自的工作线程数...转载 2019-03-06 15:04:42 · 541 阅读 · 0 评论 -
Java多线程简述(2)_并发CAS原理
多线程操作共享资源时,会出现三个问题:可见性、有序性以及原子性。一般情况下,我们采用synchronized同步锁(独占锁、互斥锁),即同一时间只有一个线程能够修改共享变量,其他线程必须等待。但是这样的话就相当于单线程,体现不出来多线程的优势。那么我们有没有另一种方式来解决这三个问题呢?在上一章中,我们提到了一个volatile关键字,它可以解决可见性和有序性的问题。而且如果操作...转载 2019-03-06 13:24:54 · 238 阅读 · 0 评论 -
java多线程简述
线程是程序执行的最小单元,多线程是指程序同一时间可以有多个执行单元运行(这个与你的CPU核心有关)。在java中开启一个新线程非常简单,创建一个Thread对象,然后调用它的start方法,一个新线程就开启了。那么执行代码放在那里呢?有两种方式:1. 创建Thread对象时,复写它的run方法,把执行代码放在run方法里。2. 创建Thread对象时,给它传递一个Runnable对象,把执...转载 2019-03-06 13:23:06 · 181 阅读 · 0 评论 -
线程池总类以及线程池的核心参数简述
JDK自带线程池总类:1、newFixedThreadPool创建一个指定工作线程数量的线程池。每当提交一个任务就创建一个工作线程,如果工作线程数量达到线程池初始的最大数,则将提交的任务存入到池队列中。2、newCachedThreadPool创建一个可缓存的线程池。这种类型的线程池特点是:1).工作线程的创建数量几乎没有限制(其实也有限制的,数目为Interger.MAX_VALUE...原创 2018-10-25 09:23:02 · 1905 阅读 · 0 评论 -
线程、多线程知识点总结(一)
1、进程(process)狭义定义:进程就是一段程序的执行过程。广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。简单的来讲进程的概念主要有两点:第一,进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(dat...原创 2018-08-27 13:45:27 · 349 阅读 · 0 评论 -
线程、多线程知识点总结(二)
主要这几天在看些线程相关的知识,想着就把自己理解的知识做一下梳理和总结。今天主要总结下线程的几个状态以及这个几个状态之间的关联和达到的必要条件,以及wait 、notify、notifyAll、sleep、join等方法的简单理解。1.线程的状态上图所示线程的新建有三种方法继承Thread类、实现runnable接口、实现callable接口有ExecutorService回调来创建线...原创 2018-08-28 10:26:04 · 213 阅读 · 0 评论