线程安全笔记

原创 2018年04月15日 15:08:30

线程安全性

当多个线程访问某个类时,这个类始终能表现出正确的行为时,那么就称这个类是线程安全的。

始终就意味着与多个线程的执行时序无关,并不需要在调用程序时执行额外的同步管理,如何折腾都能保证这个类的正确执行,而什么谓之正确执行,我想就是类的对象变量和静态变量表现正确吧,数据可预知,能够按照猜想执行下去,不违反类内部的约定条件(比如说我设计一个类,要求包含两个数值,A必须大于B,这个就是类的条件)。如何验证猜想也就只能写测试用例了。

如何分析一个类是否是需要线程安全或者如何判断这个类是安全的,(1)这个类是否有可能被多个线程去访问,如果只由单个线程去访问,我们就无需继续往下分析了。(2)如果类须由多个线程访问,那么,我们就要找出类是否设计有静态变量和对象变量,如果没有静态变量或者对象变量,那么我们可以称这个类为无状态类,由于只存在局部变量,局部变量全部封装在线程栈区内,而线程不存在共享变量,所以线程安全性也就不需要考虑了。(3)若存在静态变量或者对象变量,先分析这些变量是否全为可变的,这个类又有可能被多个线程访问,那么则需要一些手段去保证这个类的状态的线程安全性。

 

常常用到的设计手段

(1)将唯一状态托管给线程安全类,注意是唯一状态,也就是只有一个对象变量或者静态变量,若状态不唯一,那么仅使用线程安全类是不足够的。

(2)同步操作,对操作变量的接口使用synchronized进行协同步调的操作。

(3)使用volatile关键字。volatile其实是一种弱化的同步操作。

在进行一个安全类设计的时候,我们常常需要在安全性和线程活跃性能之间抉择。要设计一个安全的类其实很简单,你对每个方法进行synchronized就可以了,但是这样会大大的浪费cpu性能。我们通常会尽量缩减同步代码块的区域来获得良好的活跃性能和安全性。



面试题整理笔记(一)

面试题
  • h2482018
  • h2482018
  • 2016-05-04 20:15:38
  • 340

c/c++内存池

  • 2017年09月26日 22:08
  • 5KB
  • 下载

线程安全的单例模式

  • 2012年12月07日 15:29
  • 345KB
  • 下载

c++ stl线程安全

  • 2011年08月07日 07:33
  • 393KB
  • 下载

Action是否线程安全

  • 2009年04月20日 19:26
  • 73KB
  • 下载

C++学习笔记--多线程

优缺点对比: 多线程开销小,但难于管理,且不能用于分布式系统; 多进程开销大,操作系统会进行一部分管理,因此用户管理就比较简单,可用于分布式; 通常多线程和多进程结合使用。 参考资料:http...
  • du_qi
  • du_qi
  • 2016-08-26 22:35:14
  • 1405

java笔记-多线程-线程安全

多线程概述: /* ** 1.进程: ** 是一个这在执行中的程序,每一个进程执行都有一个顺序,该顺序是一个执行路径,或者叫控制单元。 ** 2.线程: ** 就是进程中一个独立的控制单元,线程控制...
  • Cs1275
  • Cs1275
  • 2014-07-28 16:23:36
  • 451

关于线程安全的笔记

在学习servlet时,了解到servlet是单例多线程访问的,如果多个请求指向同一个servlet时,是否会产生线程不安全?我做了一个小实验来说明使用局部变量可以避免线程不安全。 public c...
  • love_the_trace
  • love_the_trace
  • 2016-01-20 19:56:01
  • 229

线程安全处理笔记(一)

目前主流智能操作系统都引入了多线程的计算,这就带来了线程的安全问题,而线程安全问题多是由多线程对共享资源的访问引起的。 在线程的安全方面,Android采用的更多是java的实现,,除了Java的j...
  • qq_22182379
  • qq_22182379
  • 2016-01-02 22:32:28
  • 173

java笔记1——线程安全

如果代码中有多个线程同时进行,且运行后的结果与单线程的相同就称该程序为线程安全的,否则为不安全。 StringBuilder 与 StringBuffer 之间的最大不同在于 StringB...
  • qq_37416111
  • qq_37416111
  • 2017-04-20 12:08:07
  • 25
收藏助手
不良信息举报
您举报文章:线程安全笔记
举报原因:
原因补充:

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