Thread专题(1)中如何确保线程安全?

2026-05-28 02:230阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计3588个文字,预计阅读时间需要15分钟。

Thread专题(1)中如何确保线程安全?

此文章被作者收录在系列文章《架构师必备》(系列)中。其中,中提到,线程安全就是对共享的、可变的状态进行管理,对象的状态就是它的数据,换句话说是,在不可控制的并发访问中保护数据。

此文被笔者收录在系列文章 ​​​架构师必备(系列)​​ 中

线程安全就是对共享的、可变的状态进行管理,对象的状态就是它的数据,换句话说就是在不可控制的并发访问中保护数据。一个对象是否应该是线程安全的取决于它是否会被多个线程访问。这个特性表明,不是对象完成了什么而是程序如何使用对象。

无论何时,只要多于一个的线程访问给定的状态变量,并且其中某个线程会写入该变量,此时必须使用同步来协调多个线程对该变量的访问。java中首要的同步机制是synchronized关键字,它提供了独占锁,另外还包括volatile变量、显示锁和原子变量等方式。设计程序时,一开始把程序设计成线程安全的比后期再进行维护要方便的多,因为封装、不可变性、明确的不变约束等设计会对程序提供很大的便利性。

完全由线程安全类组成的程序未必是线程安全的。线程安全程序也未必全部由线程安全类组成。如果不涉及I/O或访问共享数据,Ncpu或Ncpu+1个线程会产生最优吞吐量,更多的线程也不会有更多的帮助,还可能降低性能。

阅读全文

本文共计3588个文字,预计阅读时间需要15分钟。

Thread专题(1)中如何确保线程安全?

此文章被作者收录在系列文章《架构师必备》(系列)中。其中,中提到,线程安全就是对共享的、可变的状态进行管理,对象的状态就是它的数据,换句话说是,在不可控制的并发访问中保护数据。

此文被笔者收录在系列文章 ​​​架构师必备(系列)​​ 中

线程安全就是对共享的、可变的状态进行管理,对象的状态就是它的数据,换句话说就是在不可控制的并发访问中保护数据。一个对象是否应该是线程安全的取决于它是否会被多个线程访问。这个特性表明,不是对象完成了什么而是程序如何使用对象。

无论何时,只要多于一个的线程访问给定的状态变量,并且其中某个线程会写入该变量,此时必须使用同步来协调多个线程对该变量的访问。java中首要的同步机制是synchronized关键字,它提供了独占锁,另外还包括volatile变量、显示锁和原子变量等方式。设计程序时,一开始把程序设计成线程安全的比后期再进行维护要方便的多,因为封装、不可变性、明确的不变约束等设计会对程序提供很大的便利性。

完全由线程安全类组成的程序未必是线程安全的。线程安全程序也未必全部由线程安全类组成。如果不涉及I/O或访问共享数据,Ncpu或Ncpu+1个线程会产生最优吞吐量,更多的线程也不会有更多的帮助,还可能降低性能。

阅读全文