Java并发-线程安全性
首先了解一下多线程的概念
多线程:两段或以上的代码同时进行,多个顺序执行流。
并发和并行的区别
并发:做一下这个做一下那个。
并行:同时进行。
线程和进程的区别
进程:资源分配的基本单位,运行中的程序。进程中包括多个线程,线程们共享进程的资源。
线程:处理器调度的基本单位。
线程的状态:
线程创建的方法:
(1)继承Thread类 (2)实现Runnable接口 (3)匿名内部类、Lambda表达式 (4)带返回值的线程
要想使对象是线程安全的,需要采用同步机制来协同,如果无法实现,那么可能会导致数据破坏和其他的结果,在Java机制中,提供了synchronize、volatile、显式锁等机制来进行,也有三种思路:(1)不在线程之间共享数据。(2)将状态变量修改成不可变变量。(3)在访问时使用同步。
什么是线程安全性:某个类的行为和其规范一致。
原子性:如果某个操作是不可分割的,那么我们就可以称之为原子性操作。
我们在解决线程竞态问题时,不可能只靠通过设置线程安全变量来进行,Java为我们提供了加锁机制。
内置锁:Java为我们提供了synchronize来实现内置锁,synchronize方法以Class对象作为锁。
重入:当某个线程请求被其他线程持有的锁时,就会发生阻塞。然而由于内置锁时可重入的,因此某线程在请求一个已经由它持有的锁时,该请求就会成功。重入的实现方法时为每一个锁关联一个获取计数值和一个所有者线程,当技术值为0时,表示该锁没有被线程持有。如果重入后,计数值会加,当线程退出同步代码时,计数值会减,当计数值为0时,该锁会释放。