龙空技术网

什么是 Java 的线程安全?

会点代码的大叔 284

前言:

而今兄弟们对“java常用线程安全类是什么”大体比较注意,看官们都想要知道一些“java常用线程安全类是什么”的相关知识。那么小编在网络上搜集了一些关于“java常用线程安全类是什么””的相关文章,希望姐妹们能喜欢,我们一起来学习一下吧!

在讲解 Java 的线程安全之前,先让我们看看线程和进程的关系:

线程 VS 进程进程是程序的一次执行过程;你打开了一个记事本就是启动了一个进程;在 Java 中,启动 main 函数,就是启动了一个 JVM 的进程;线程是一个比进程更小的执行单位,也是最小的执行单元,一个进程在其执行的过程中可以产生多个线程(至少有一个线程);在 JVM 的进程中,多个线程共享堆和方法区 (JDK1.8 之后的元空间),但是每个线程有自己的计数器、虚拟机栈和本地方法栈。线程安全

虽然多线程可以带来更好的性能,但是线程也不是越多越好,因为线程之间的调度和切换会浪费CPU的时间;

在代码开发过程中,我们需要保证多线程执行和单线程执行,得到的结果要永远保持一致,这就叫做线程安全。

线程安全级别

关于线程安全的定义上文中也已经提到了,那么在 Java 开发过程中,线程安全有哪些级别呢?

不可变:比如String、Integer、Long,都是 final 类型的类,任何一个线程都改变不了它们的值;绝对线程安全:在任何环境下,调用者都不需要额外的同步措施;比如 CopyOnWriteArrayList ,当然为了达到这种程度,要付出额外的代价,比如性能;相对线程安全:就是我们通常意义上所说的线程安全,大多数情况下,都能够正常运行;比如 Vector ,add、remove 方法都是原子操作,但是如果有两个线程同时操作,一个线程遍历,另外一个线程执行 remove 操作的话,就可能会抛出异常。非线程安全:这个就比较容易理解了,在开发过程中,调用者需要考虑同步问题。比如List ,Map,都是非线程安全的。我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注;关注我后,可私信发送数字【1】,获取学习资料。

标签: #java常用线程安全类是什么 #java的线程安全