作者:禅与计算机程序设计艺术
1.简介
在软件开发过程中,程序员经常需要处理并发问题。并发问题即多个任务或线程同时执行导致结果不确定性的问题。解决并发问题的一个方法就是引入并发机制。Java提供了多种并发机制,其中最主要的两种机制是共享变量和锁。本文将介绍并发编程中常用的两个重要机制——共享变量和锁。
2.基本概念
2.1 共享变量
在计算机科学里,共享变量(shared variable)指的是两个或多个进程之间可以共享的数据。当某个数据被多个进程访问时,这个数据就成为共享变量。举个例子,假设有一个变量num,初始值为0。两个进程A、B分别读取num的值,然后分别加上1,然后把新的值赋值给num。因为num是共享变量,所以最终num的值应该是2而不是1。这是因为两者都读到的是0,然后各自加了1,最后把自己的值覆盖掉了其他人的,导致出现了错误。要使得多个进程能够同时访问同一个变量,必须确保对该变量的访问是安全的。也就是说,对于并发访问来说,不能让多个进程同时对其进行修改,否则会造成数据的混乱。
2.2 锁
锁(Lock)是用来控制对共享资源的访问的工具。每个锁只能由单个线程持有,其他线程如果想访问该锁所对应的资源,就必须等当前线程释放锁之后才能获取。通过锁可以保证共享变量在并发情况下的正确性。
2.3 Synchronized关键字
Synchronized关键字是一个语句形式的锁。它修饰的方法或者代码块称为同步代码块(Synchronized Code Block),当有多个线程试图执行该同步代码块时,只有一个线程能进入,其它线程则被阻塞住,直到同