JAVA 线程同步

概述

多线程修改公共变量时,会引发bug,为了解决bug,要用到线程同步

在多线程修改公共变量时,如下图:

  1. 第一步,先让一个线程读变量num的值
    注意:具体是哪个线程不一定,由操作系统调度,图中由 线程1 执行
  2. 第二步,让该线程计算后将值写入内存
  3. 第三步,然后让另一个线程读变量num的值
  4. 第四步,让该线程计算后将值写入内存

锁

多线程编程中,当代码需要 同步 时会用到 锁。

Java为我们提供了 内置锁(synchronized) 和 显式锁(ReentrantLock) 两种同步方式。

显式锁是JDK1.5引入的

内置锁

Java内置锁通过synchronized关键字使用,使用其修饰方法或者代码块,就能保证方法或者代码块以同步方式执行。

显示锁

ReentrantLock的字面意思是可重入锁,可重入的意思是线程可以同时多次请求同一把锁,而不会自己导致自己死锁。

临界资源

某些公共资源 只能一个线程访问操作,这样的资源称为临界资源(互斥资源,共享变量)

如:商品数量、票号,或者打印机

临界区

访问临界资源的那段代码称为临界区

如:访问票号的代码

线程互斥

由于多线程要共享资源,而有些资源需要互斥使用,因此各线程间竞争使用这些资源

如:多线程修改公共变量,多线程访问打印机等

线程同步

多线程访问操作公共资源时,需要多个线程有顺序的执行,互相合作、互相等待,共同完成一项任务。

一般来说,同步往往包含互斥


原文出处:/show_1EF4swoGPPPY.html