Java并发理论简介
这些文字来自于Java程序员修炼之道,记录一下
一、 java线程模型
Java线程模型建立在两个基本概念之上
- 共享的,默认可见的可变状态
- 抢占式线程调度
我们从侧面思考一下这两个概念
- 所有线程可以很容易地功效统一进程中的对象
- 能够引用这些对象的任何线程都可以修改这些对象
- 线程调度程序差不多任何时候都能在核心上调入或调出线程
- 必须能调出运行时的方法,否则无限循环方法会一直占用CPU
- 为了保护脆弱的数据,对象可以被锁住
二、设计理念
- 安全性(并发类型安全性)
- 活跃性
- 性能
- 重用性
1、安全性与并发类型安全性
安全性是指不管同时发生多少操作都能确保对象保持自相一致。如果一个对象系统具备这一特性,那它就是并发类型安全的。
保证安全:
保证安全的策略之一就是处于非一致状态时绝不能从非私有方法中返回,也绝不能调用任何非私有方法,而且也绝不能调用其他任何对象中的方法。如果把这个策略跟某种对非一致对象的保护方法(比如同步锁或临界区)结合起来,就可以保证系统是安全的(不大理解)
2、活跃度
在一个活跃的系统中,所有做出尝试的活动最终或者取得进展,或者失败
三、原则互相冲突
设计原则经常相互对立
- 安全性与活跃性相互对立---安全性确保坏事不会发生,活跃度要求见到进展
- 可重用性的系统倾向于对外开放其内核,可这会引发安全问题
- 一旦安全但编写方式幼稚的系统性能通常都不会太好,因为里面会用大量的锁来保证安全性
- 尽可能限制子系统之间的通信。隐藏数据对安全性非常有帮助
- 尽可能保证子系统内部结构的确定性。比如说,即便子系统会以并发的、非确定性的方式进行交互,子系统内部的设计也应该参照线程和对象的静态知识
- 采用客户端应用必须遵守的策略方针
- 在文档中记录所要求的行为
Java并发理论简介的更多相关文章
- JAVA并发理论与实践
JDK5.0中更灵活.更具可伸缩性的锁定机制 流行的原子 非阻塞算法简介
- Java 并发理论简述
一:为什么需要多线程? 线程是Java语言中不可或缺的重要部分,它们能使复杂的异步代码变得简单,简化复杂系统的开发:能充分发挥多处理器系统的强大计算能力.多线程和多进程的区别与选择可以参考我的另一篇博 ...
- java 并发——CountDownLatch
java 并发--CountDownLatch 简介 public class CountDownLatch { private final Sync sync; private static fin ...
- java 并发——ReentrantLock
java 并发--ReentrantLock 简介 public class ReentrantLock implements Lock, java.io.Serializable { // 继承了 ...
- java 并发——AbstractQueuedSynchronizer
java 并发--AbstractQueuedSynchronizer 简介 abstract class AbstractQueuedSynchronizer extends AbstractOwn ...
- java并发多线程显式锁Condition条件简介分析与监视器 多线程下篇(四)
Lock接口提供了方法Condition newCondition();用于获取对应锁的条件,可以在这个条件对象上调用监视器方法 可以理解为,原本借助于synchronized关键字以及锁对象,配备了 ...
- java 并发多线程显式锁概念简介 什么是显式锁 多线程下篇(一)
目前对于同步,仅仅介绍了一个关键字synchronized,可以用于保证线程同步的原子性.可见性.有序性 对于synchronized关键字,对于静态方法默认是以该类的class对象作为锁,对于实例方 ...
- [Java并发编程(四)] Java volatile 的理论实践
[Java并发编程(四)] Java volatile 的理论实践 摘要 Java 语言中的 volatile 变量可以被看作是一种 "程度较轻的 synchronized":与 ...
- 【Java并发.1】简介
继上一本<深入理解Java虚拟机>之后,学习计划里的另一本书<Java并发编程实战>现在开始学习,并记录学习笔记. 第一章主要内容是介绍 并发 的简介.发展.特点. 编写正确的 ...
随机推荐
- window7上爬虫框架Scrapy的安装 --错误分析lxml
本文讲解的是python已经安装成功的情况下,且pip可以使用 版本:python2.7.10 #安装 pip install Scrapy 在安装Scrapy框架时总会报lxml安装不了的各种错误, ...
- Instances cannot be resolved and nested lifetimes cannot be created from this LifetimeScope as it has already been disposed.
2019-07-24 11:09:15.231+08:00 LISA.Common.Utilities.LogUtil - System.ObjectDisposedException: Instan ...
- leetcode-hard-ListNode-23. Merge k Sorted Lists
mycode 91.2% # Definition for singly-linked list. # class ListNode(object): # def __init__(self, x ...
- html5-meta标签和搜索引擎
emta标签的组成: meta标签分两大部分:HTTP-EQUIV 和 NAME 变量. HTTP-EQUIV:HTTP-EQUIV类似于HTTP的头部协议,它回应给浏览器一些有用的信息,以帮助 ...
- NavMenu 导航菜单
顶栏 适用广泛的基础用法. 导航菜单默认为垂直模式,通过mode属性可以使导航菜单变更为水平模式.另外,在菜单中通过submenu组件可以生成二级菜单.Menu 还提供了background-colo ...
- 如何解决使用 JMeter 时遇到的问题
这是对 JMeter 官方网站上一篇文章的翻译.点击这里可以访问原文JMeterTroubleShooting. • check the log file. This is normally in t ...
- 从Windows系统到Linux系统转变的5大要点
当我在 Algoma (阿尔格玛)大学开始我现在的工作,一个图书系统管理员,我实在是对我的工作没有什么信心.尽管我在图书信息技术上有十年经验,对于我的第一个任务——协助开发和管理 Evergreen ...
- 麦香牛肉(dp 、数论)
麦香牛肉 时间限制: 1 Sec 内存限制: 128 MB 题目描述 农夫约翰的奶牛几乎要武装暴动,因为他们听说麦当劳要推出新产品麦香牛肉.奶牛们要尽力阻止这种产品的上市.他们研究了一种“劣等包装” ...
- 深入理解python中函数传递参数是值传递还是引用传递
深入理解python中函数传递参数是值传递还是引用传递 目前网络上大部分博客的结论都是这样的: Python不允许程序员选择采用传值还是传 引用.Python参数传递采用的肯定是"传对象引用 ...
- JS事件中级 --- 拖拽
http://bbs.zhinengshe.com/thread-1200-1-1.html 要求:实现div块的拖拽 原理:拖拽过程中鼠标点和div块的相对位置保持不变. 需要理解三点: 1. 为什 ...