Java并发编程实战笔记(1)- 线程安全

原创 2016年10月19日 17:07:22



1、什么是线程安全?

线程安全是指多个线程同时访问同一个类时,如果不需要额外的同步,这个类的行为仍然是正确的。原子操作是线程安全的,锁就是要把复合操作变成原子操作。比较常见的复合操作有:

1)、读 - 写 - 改

2)、检查再修改

public class Instance() {  
     private Instance in = null;  
     public Instance getInstance() {  
          if(in == null) {  // 如果两个线程同时执行到这里就会有同步问题
              in= new Instance();  
          }  
          return in;  
     }  
} 

1、什么是线程安全?

线程安全是指多个线程同时访问同一个类时,如果不需要额外的同步,这个类的行为仍然是正确的。原子操作是线程安全的,锁就是要把复合操作变成原子操作。比较常见的复合操作有:

1)、读 - 写 - 改

2)、检查再修改


线程控制逃逸规则

如果一个资源的创建、使用和销毁都是在一个线程里面完成的,而且永远不会脱离该线程的控制,则该资源的使用就是线程安全的。线程控制逃逸规则可以判断代码中对某些资源的访问是不是线程安全的。

2、分布式与集群

简单说,分布式是以缩短单个任务的执行时间来提升效率的,而集群则是以提升单位时间内执行的任务数来提升效率的。

例如,一个任务可以分成10个子任务,每个子任务需要1个小时。如果只有一台服务器,那么需要10个小时完成任务。

如果采用分布式解决方案,提供10台服务器,每个服务器处理其中的一个子任务,那么完成任务只需要一个小时。

如果采用集群解决方案,同样提供10台服务器,每个服务器可以独立完成一个任务,那么10个任务只需要10个小时就完成了,最终达到的效果也是一个小时完成一个任务。

集群的两大关键特性

  • 可扩展性:新的服务实体要可以加入到集群中
  • 高可用性:一个服务实体挂了,一定有另外一个服务实体来接替它

集群的两个关键能力

  • 负载均衡:把任务均衡的分布到不同的服务实体上
  • 错误恢复:一个服务实体不能工作,要有另外一个实体来替换它

集群大致分为:高可用集群、负载均衡集群、科学计算集群。

总体来说,集群与分布式的区别主要有以下几点:

  1. 分布式主要是将不同的业务分布在不同的地方,而集群是把几台服务器集中在一起处理同一业务。
  2. 分布式的每一个节点可以做集群,但是集群并不一定是分布式的。


1、什么是线程安全?

线程安全是指多个线程同时访问同一个类时,如果不需要额外的同步,这个类的行为仍然是正确的。原子操作是线程安全的,锁就是要把复合操作变成原子操作。比较常见的复合操作有:

1)、读 - 写 - 改

2)、检查再修改

版权声明:本文为博主原创文章,未经博主允许不得转载。

《Java并发编程实战》读书笔记

Subsections  线程安全(Thread safety) 锁(lock) 共享对象 对象组合 基础构建模块 任务执行 取消和关闭 线程池的使用 性能与可伸缩性 并发程序的测试 显示锁 原子变量...
  • cdl2008sky
  • cdl2008sky
  • 2014年05月20日 17:02
  • 24508

Java多线程编程实战指南(核心篇)读书笔记(二)

Java多线程编程实战指南(核心篇)读书笔记(二)
  • qq_25827845
  • qq_25827845
  • 2017年08月03日 21:51
  • 3947

《Java并发编程实战》第十六章 Java内存模型 读书笔记

Java内存模型是保障多线程安全的根基,这里仅仅是认识型的理解总结并未深入研究。 一、什么是内存模型,为什么需要它 Java内存模型(Java Memory Model)并发相关的安全...
  • love_world_
  • love_world_
  • 2014年06月05日 07:58
  • 1508

《Java并发编程实战》读书笔记二:构建线程安全

一、用组合来实现线性安全1.设计线程安全的类设计线程安全类的三个基本要素: 1. 找出构成对象状态的所有变量 2. 找出约束状态变量的不变性条件 3. 建立对象状态的并发访问管理策略要分析对象的...
  • jeffleo
  • jeffleo
  • 2016年12月24日 20:54
  • 421

Java并发编程实践笔记(二)——chapter1(线程安全)

1.原子性与线程安全 多个线程操作一个全局变量int i,操作是i++。 1.可见性 通过volatile关键字是解决线程安全问题的必要条件。 2.原子性 保证原子性也是解决线程安全问题的必要条件。因...
  • xxcupid
  • xxcupid
  • 2016年10月11日 23:21
  • 225

【并发编程实战笔记】--使用锁和条件变量的线程安全队列

使用锁和条件变量的线程安全队列
  • ykevin0510
  • ykevin0510
  • 2015年06月14日 20:15
  • 345

设计高效的线程安全的缓存(java并发编程实战5.6)

几乎每一个应用都会使用到缓存, 但是设计高效的线程安全的缓存并不简单. 如: Java代码   public interface Computable {        V compute(...
  • u012572955
  • u012572955
  • 2017年02月10日 16:58
  • 757

Java并发编程实战2-线程安全

1. 定义一个类是线程安全的,是指在被多个线程访问时,类可以持续进行正确的行为。2. WHY我们想要的是线程安全的程序,为什么在线程安全的开始讲线程安全的类呢?编写线程安全的代码,本质上就是管理对状态...
  • Edward2Jason
  • Edward2Jason
  • 2017年05月24日 13:59
  • 248

利用对象限制和委托构建线程安全的类(java并发编程实战第四章内容)

设计线程安全的类需要考虑: 1. 确定组成对象状态的变量. 2. 确定约束对象状态的不变式. 3. 建立并发访问对象状态的规则.   后置条件: 由于某些变量的取值是有限...
  • u012572955
  • u012572955
  • 2017年02月09日 14:47
  • 181

java并发实战读书笔记(一)-线程安全

1 共享和可变状态 线程安全主要针对状态访问操作进行管理,特别是共享和可变状态的访问 (1) 共享 共享意味着多线程可同时访问。 (2)可变: 可变意味着变量的值在...
  • zongziandmifan
  • zongziandmifan
  • 2017年04月09日 01:46
  • 80
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java并发编程实战笔记(1)- 线程安全
举报原因:
原因补充:

(最多只允许输入30个字)