Java并发编程实战:线程基本概念

时间:17/12/08 06:35:56 点击:

 
     
      原标题:Java并发编程实战:线程基本概念
      学习Java并发已经有一个多月了,感觉有些东西学习一会儿了就会忘记,做了一些笔记但是不系统,对于Java并发这么大的“系统”,需要自己好好总结、整理才能征服它。希望同仁们一起来学习Java并发编程,共同进步,互相指导。
     
      在学习Java并发之前我们需要先理解一些基本的概念:共享、可变、线程安全性、线程同步、原子性、可见性、有序性。
      共享和可变
      要编写线程安全的代码,其核心在于对共享的和可变的状态进行访问。
      “共享”就意味着变量可以被多个线程同时访问。我们知道系统中的资源是有限的,不同的线程对资源都是具有着同等的使用权。有限、公平就意味着竞争,竞争就有可能会引发线程问题。
      “可变”是指变量的值在其生命周期内是可以发生改变的。“可变”对应的是“不可变”。我们知道不可变的对象一定是线程安全的,并且永远也不需要额外的同步。所以“可变”意味着存在线程不安全的风险。解决办法:
      1、不在线程中共享该状态变量,可以将变量封装到方法中。
      2、将状态变量修改为不可变的变量。
      3、访问状态变量时使用同步策略。
      4、使用原子变量类。
      线程安全性
      线程安全是一个比较复杂的概念。其核心概念就是正确性。所谓正确性就是某各类的行为与其规范完全一致,即其近似与“所见即所知”。当多个线程访问某各类时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在主调代码中不需要任何额外的同步或者协同,这个类都能表现出正确的行为,那么就称这个类是线程安全的。
      线程同步
      线程通过其核心就在于一个“同”。所谓“同”就是协同、协助、配合,“同步”就是协同步调昨,也就是按照预定的先后顺序进行运行,即“你先,我等, 你做完,我再做”。
      线程同步,就是