Iml
Iml
全部文章
多线程与高并发
Java基础(3)
Java集合(5)
JVM(13)
LeetCode(3)
RabbitMQ(1)
Redis(6)
Solr(1)
SpringMVC(2)
剑指offer(52)
数据库(2)
未归档(44)
计算机网络(3)
设计模式(1)
归档
标签
去牛客网
登录
/
注册
代码学习之路
我之为我,只在异人处
全部文章
/ 多线程与高并发
(共10篇)
线程死锁
1.1.什么是线程死锁? 多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞,因此程序不可能正常终止。 如下图所示,线程 A 持有资源 2,线程 B 持有资源 1,他们同时都想申请对方的资源,所以这两个线程就会互相等待而进入死锁状态。 下面通过一个例子来说明...
2019-06-29
0
556
线程的生命周期和状态
1.1.线程状态 Java 线程在运行的生命周期中的指定时刻只可能处于下面 6 种不同状态的其中一个状态(图源《Java 并发编程艺术》4.1.4 节)。 线程在生命周期中并不是固定处于某一个状态而是随着代码的执行在不同状态之间切换。Java 线程状态变迁如下图所示(图源《Java 并发编程艺术...
2019-06-29
0
593
线程和进程
1.1.什么是线程和进程? 进程: 进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。 在 Java 中,当我们启动 main 函数时其实就是启动了一个 JVM 的进程,而 main 函...
2019-06-29
0
623
Atomic 原子类
1.1.介绍一下 Atomic 原子类 Atomic 翻译成中文是原子的意思。在化学上,我们知道原子是构成一般物质的最小单位,在化学反应中是不可分割的。在我们这里 Atomic 是指一个操作是不可中断的。即使是在多个线程一起执行的时候,一个操作一旦开始,就不会被其他线程干扰。 所以,所谓原子类说...
2019-06-28
0
711
线程池
1.1. 为什么要用线程池? 这里借用《Java 并发编程的艺术》提到的来说一下使用线程池的好处: 降低资源消耗==》通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 提高响应速度==》当任务到达时,任务可以不需要的等到线程创建就能立即执行。 提高线程的可管理性==》线程是稀...
2019-06-27
0
540
ThreadLocal深入学习
1.1. ThreadLocal简介 通常情况下,我们创建的变量是可以被任何一个线程访问并修改的。如果想实现每一个线程都有自己的专属本地变量该如何解决呢? JDK中提供的ThreadLocal类正是为了解决这样的问题。 ThreadLocal类主要解决的就是让每个线程绑定自己的值,可以将Threa...
2019-06-27
0
688
volatile关键字深入学习
1.1、讲一下Java内存模型 在 JDK1.2 之前,Java的内存模型实现总是从主存(即共享内存)读取变量。而在当前的 Java 内存模型下,线程可以把变量保存本地内存(比如机器的寄存器)中,而不是直接在主存中进行读写。这就可能造成一个线程在主存中修改了一个变量的值,而另外一个线程还继续使用它...
2019-06-27
0
1217
synchronized 关键字深入学习
1.1. 说一说自己对于 synchronized 关键字的了解 synchronized关键字解决的是多个线程之间访问资源的同步性,synchronized关键字可以保证被它修饰的方法或者代码块在任意时刻只能有一个线程执行 另外,在 Java 早期版本中,synchronized属于重量级锁,...
2019-06-27
0
547
Synchronized 和 ReentratLock的区别
两者的区别 Reentrantlock 可响应中断、可轮询;synchronized是不可响应中断的。Lock可以让等待锁的线程响应中断,synchronized等待的线程会一直等待下去,不能够响应中断。 Lock可以使用Condition进行线程之间的调度;Condition可以...
2019-05-29
0
515
Synchronized 与 volatile 区别?
synchronized和volatile的区别: volatile和synchronized特点 首先需要理解线程安全的两个方面:执行控制和内存可见。 执行控制:的目的是控制代码执行(顺序)及是否可以并发执行。 内存可见:控制的是线程执行结果在内存中对其它线程的可见性。根据...
2019-05-13
0
864