设有若干线程共享某个变量,且都对变量有修改, 如果它们之间不考虑相互协调工作, 就会产生混乱。
比如线程A 和 B共用变量x, 都对 x 执行增1 操作。 由于A 和 B没有协调, 两线程 对 x的读取、修改和写入操作会相互交叉, 可能两个线程 读取同样的 x 值,一个线程将修改后的 x
值写入到x 后,另一个线程也把自己 对x 的修改后的新就值写入到x, 这样, x 只记录后一个线程的修改作用。
1. 解决多线程互斥 的办法是, 某个线程在使用共享 变量时,别的线程暂时等待, 等待正在使用 共享 变量的线程使用结束。 等到前一个线程使用结束后, 才让等待使用 共享变量的其他线程中的某一个使用它, 而别的线程 继续等待. 如能保证它们是逐个 使用共享变量,再多的线程使用共享变量也不会产生混乱.
2. 多线程互斥使用共享资源 的程序段, 在操作系统中称为临界段. 临界段是一种加锁的机制, 与多线程 共享资源有关。
临界段的作用是在任何时刻一个共享资源只能供一个线程使用。
3. 在Java 中,使用关键字synchronized 定义临界段。能对共享对象 的操作上锁。