`
cyril0513
  • 浏览: 15753 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

<<java并发编程实践>>读书笔记之委托线程安全

阅读更多
public class NumberRange {

	private AtomicInteger lower = new AtomicInteger(0);
	private AtomicInteger upper = new AtomicInteger(0);

	public void setLower(int i) {
		if (i > upper.get()) {
			throw new IllegalArgumentException();
		}
		lower.set(i);
	}

	public void setUpper(int i) {
		if (i < lower.get()) {
			throw new IllegalArgumentException();
		}
		upper.set(i);
	}

	public boolean isInRange(int i) {
		return (i <= upper.get() && i >= lower.get());
	}
}


这段代码的意图就是维护一个数值的范围,共享实例变量的线程安全维护委托给AtomicInteger去完成,其实已经这里显然已经力不从心。
只能保证线程间的可见性,但不能保证原子性。如果仅仅只是set当然是没有问题的,但是这里涉及的是符合操作。先判断后set.
假设有一个场景:
lower=2,upper=8
当线程A调用setLower为7的时候,执行set(7),此时有一个线程B调用setUpper(5),由于线程的活跃度不可控,假设A的set动作还刚刚完成,而线程B已经执行到set(5),此时我们维护的数据就已经被破坏。
从上述我们可以看出,这种委托显然是不合理的,因为lower和upper他们是耦合的而不是独立的,这样的对象不能发布,避免用户破坏其不变约束。
于是书中给出了一个总结:
如果一个类由多个彼此独立的线程安全的状态变量组成,而且类的操作不包含任何无效状态的转换,可以讲线程安全委托给这些状态变量。
这里既是类NumberRange包含2个线程安全的成员,也不能保证NumberRange就是线程安全的。
这条规则就是适合诸如:Atomic***,AtomicReference,volatile
分享到:
评论

相关推荐

    java并发编程实践pdf笔记

    Java并发编程实践是Java开发中不可或缺的一个领域,它涉及到如何高效、正确地处理多线程环境中的任务。这本书的读书笔记涵盖了多个关键知识点,旨在帮助读者深入理解Java并发编程的核心概念。 1. **线程和进程的...

    JAVA并发编程实践.pdf+高清版+目录 书籍源码

    《JAVA并发编程实践》这本书是Java开发者深入理解并发编程的重要参考资料。它涵盖了Java并发的核心概念、工具和最佳实践,旨在帮助...通过学习这本书,你将能够有效地应对并发编程中的挑战,提升你的多线程编程能力。

    Java并发编程实践高清pdf及源码

    《Java并发编程实践》是一本深入探讨Java多线程编程的经典著作,由Brian Goetz、Tim Peierls、Joshua Bloch、Joseph Bowles和David Holmes等专家共同编写。这本书全面介绍了Java平台上的并发编程技术,是Java开发...

    java并发编程实践(中文版pdf全部40M分2部分上传)2

    《JAVA并发编程实践》既能够成为读者的理论支持,又可以作为...《JAVA并发编程实践》适合于具有一定Java编程经验的程序员、希望了解Java SE 5以及6在线程技术上的改进和新特性的程序员,以及Java和并发编程的爱好者。

    java并发编程实践高清中文版+源码

    《JAVA并发编程实践》随着多核处理器的普及,使用并发成为构建高性能应用程序的关键。Java 5以及6在开发并发程序中取得了显著的进步,提高了Java虚拟机的性能以及并发类的可伸缩性,并加入了丰富的新并发构建块。在...

    java线程与并发编程实践

    Java线程与并发编程实践是Java开发者必备的技能之一,特别是在多核处理器和高并发应用环境中,有效地管理和利用线程能极大地提升程序的性能。本书《java线程与并发实践编程》由Jeff Friesen撰写,2017年2月出版,...

    JAVA并发编程实践

    《JAVA并发编程实践》随着多核处理器的普及,使用并发成为构建高性能应用程序的关键。Java 5以及6在开发并发程序中取得了显著的进步,提高了Java虚拟机的性能以及并发类的可伸缩性,并加入了丰富的新并发构建块。在...

    JAVA并发编程实践.pdf

    《JAVA并发编程实践》适合于具有一定Java编程经验的程序员、希望了解Java SE 5以及6在线程技术上的改进和新特性的程序员,以及Java和并发编程的爱好者。 作者简介 作者:(美)戈茨 等 本书作者系lava标准化组织...

    JAVA并发编程实践 pdf

    《JAVA并发编程实践》这本书是Java开发者深入理解并发编程的重要参考资料。并发编程是现代软件开发中的核心主题,尤其是在多核处理器普及的今天,利用好并发能够显著提升程序的执行效率和系统性能。这本书以实践为...

    java并发编程实践

    ### Java并发编程实践知识点详解 #### 一、Java并发编程基础 ##### 1.1 并发与并行概念区分 在Java并发编程实践中,首先需要理解“并发”与“并行”的区别。“并发”指的是多个任务同时进行,但实际上可能是在多...

    Java并发编程实践

    9. **并发工具类**:`CountDownLatch`、`CyclicBarrier`、`Semaphore`等并发工具类在多线程编程中用于协调线程间操作,如计数、同步和信号量控制。 10. **原子变量与原子类**:`java.util.concurrent.atomic`包提供...

    Java并发编程实践.pdf

    ### Java并发编程实践 #### 一、并发编程基础 ##### 1.1 并发与并行的区别 在Java并发编程中,首先需要理解“并发”(Concurrency)和“并行”(Parallelism)的区别。“并发”指的是多个任务在同一时间段内交替...

    Java 并发编程实战.pdf

    书中还可能涵盖无锁编程的概念和实践,这涉及到Java的volatile关键字和final关键字,以及这些特性如何帮助构建线程安全的代码。 在并发控制方面,《Java并发编程实战》可能会探讨不同类型的锁,如互斥锁(Mutex)、...

    java并发编程实践(第一版)

    《Java并发编程实践》作为一本关于Java并发编程的经典书籍,通过理论讲解和实践案例相结合的方式,全面地向读者介绍了如何在Java中实现高效的并发程序设计,为开发者提供了丰富的工具和策略来处理多线程编程中的挑战...

    《java并发编程实践》

    《Java并发编程实践》这本书是Java开发者深入了解并发编程的重要参考资料,尤其对于想要提升在多线程环境下编程技能的程序员来说,它提供了丰富的实践经验和深入的理论解析。在Java的世界里,多线程是构建高性能、高...

Global site tag (gtag.js) - Google Analytics