这些文字来自于Java程序员修炼之道,记录一下

一、 java线程模型

Java线程模型建立在两个基本概念之上

  • 共享的,默认可见的可变状态
  • 抢占式线程调度

我们从侧面思考一下这两个概念

  • 所有线程可以很容易地功效统一进程中的对象
  • 能够引用这些对象的任何线程都可以修改这些对象
  • 线程调度程序差不多任何时候都能在核心上调入或调出线程
  • 必须能调出运行时的方法,否则无限循环方法会一直占用CPU
  • 为了保护脆弱的数据,对象可以被锁住

二、设计理念

  • 安全性(并发类型安全性)
  • 活跃性
  • 性能
  • 重用性

  1、安全性与并发类型安全性

   安全性是指不管同时发生多少操作都能确保对象保持自相一致。如果一个对象系统具备这一特性,那它就是并发类型安全的。

  保证安全:

    保证安全的策略之一就是处于非一致状态时绝不能从非私有方法中返回,也绝不能调用任何非私有方法,而且也绝不能调用其他任何对象中的方法。如果把这个策略跟某种对非一致对象的保护方法(比如同步锁或临界区)结合起来,就可以保证系统是安全的(不大理解)

  2、活跃度

  在一个活跃的系统中,所有做出尝试的活动最终或者取得进展,或者失败

三、原则互相冲突

  设计原则经常相互对立

  • 安全性与活跃性相互对立---安全性确保坏事不会发生,活跃度要求见到进展
  • 可重用性的系统倾向于对外开放其内核,可这会引发安全问题
  • 一旦安全但编写方式幼稚的系统性能通常都不会太好,因为里面会用大量的锁来保证安全性
 
    最终应该尽量让代码达到一种平衡状态
  • 尽可能限制子系统之间的通信。隐藏数据对安全性非常有帮助
  • 尽可能保证子系统内部结构的确定性。比如说,即便子系统会以并发的、非确定性的方式进行交互,子系统内部的设计也应该参照线程和对象的静态知识
  • 采用客户端应用必须遵守的策略方针
  • 在文档中记录所要求的行为
 

Java并发理论简介的更多相关文章

  1. JAVA并发理论与实践

    JDK5.0中更灵活.更具可伸缩性的锁定机制 流行的原子 非阻塞算法简介

  2. Java 并发理论简述

    一:为什么需要多线程? 线程是Java语言中不可或缺的重要部分,它们能使复杂的异步代码变得简单,简化复杂系统的开发:能充分发挥多处理器系统的强大计算能力.多线程和多进程的区别与选择可以参考我的另一篇博 ...

  3. java 并发——CountDownLatch

    java 并发--CountDownLatch 简介 public class CountDownLatch { private final Sync sync; private static fin ...

  4. java 并发——ReentrantLock

    java 并发--ReentrantLock 简介 public class ReentrantLock implements Lock, java.io.Serializable { // 继承了 ...

  5. java 并发——AbstractQueuedSynchronizer

    java 并发--AbstractQueuedSynchronizer 简介 abstract class AbstractQueuedSynchronizer extends AbstractOwn ...

  6. java并发多线程显式锁Condition条件简介分析与监视器 多线程下篇(四)

    Lock接口提供了方法Condition newCondition();用于获取对应锁的条件,可以在这个条件对象上调用监视器方法 可以理解为,原本借助于synchronized关键字以及锁对象,配备了 ...

  7. java 并发多线程显式锁概念简介 什么是显式锁 多线程下篇(一)

    目前对于同步,仅仅介绍了一个关键字synchronized,可以用于保证线程同步的原子性.可见性.有序性 对于synchronized关键字,对于静态方法默认是以该类的class对象作为锁,对于实例方 ...

  8. [Java并发编程(四)] Java volatile 的理论实践

    [Java并发编程(四)] Java volatile 的理论实践 摘要 Java 语言中的 volatile 变量可以被看作是一种 "程度较轻的 synchronized":与 ...

  9. 【Java并发.1】简介

    继上一本<深入理解Java虚拟机>之后,学习计划里的另一本书<Java并发编程实战>现在开始学习,并记录学习笔记. 第一章主要内容是介绍 并发 的简介.发展.特点. 编写正确的 ...

随机推荐

  1. EFI/UEFI BIOS 入门

    我们已经使用BIOS超过了二十年.可是直到今天还有许多朋友不知道BIOS到底是什么,以及它主要做些什么事情,它在整个个人计算机之中所处的地位如何.事实上,BIOS是整个计算机系统中最重要的底层系统软件 ...

  2. 将Chrome中的缓存数据移出C盘

    Chrome浏览器会默认的将用户的缓存是数据存放于  C:\Users\你的用户名\AppData\Local\Google\Chrome\User Data文件夹内.用久了之后,就会积攒大量缓存数据 ...

  3. PL/SQL中文乱码问题

    本人的使用情况是: 笨既没有安装Oracle,配置了PLSQL,在查询含有中文数据的时候遇到了查询的数据中有中文乱码的问题,中文显示为???,并且软件的某些提示也会出现.   先进行查询确认编码:   ...

  4. C# async await and state machine

    Async Await and the Generated StateMachine https://www.codeproject.com/Articles/535635/Async-Await-a ...

  5. Mybaits和Spring的那点事

    前言 在spring中使用mybaits简直不要太简单,只需要几个配置,一个DAO接口和一个mapper.xml就可以完成一次数据库交互.但是简单背后往往是复杂的实现,现在我们来探讨一下里面的一点原理 ...

  6. 打开新窗口(window.open)关闭窗口(window.close)

    打开新窗口(window.open) open() 方法可以查找一个已经存在或者新建的浏览器窗口. 语法: window.open([URL], [窗口名称], [参数字符串]) 参数说明: URL: ...

  7. Centos 安装freesurfer fsl matlab 等软件---转自网络

    freesurfer: freesurfer好安装,只需要下载官网源码包,如freesurfer5.3.tar.gz 下载至本地,解压: tar zxvf freesurfer5.3.tar.gz - ...

  8. LC 413. Arithmetic Slices

    A sequence of number is called arithmetic if it consists of at least three elements and if the diffe ...

  9. ORA-00904: "B"."METHOD": 标识符无效,00904. 00000 - "%s: invalid identifier"

    1 SELECT COUNT(1) FROM (SELECT a.id AS "id", a.district AS "district", a.company ...

  10. 阶段3 3.SpringMVC·_07.SSM整合案例_09.ssm整合之Spring整合MyBatis框架配置事务

    spring加入声明式的事物 配置事物 配置事物管理器 需要一个dataSource,引入上面的dataSource 配置事务通知 引入上面的transactionManager事物管理器 find开 ...