对“共享资源”的访问为了保证正确性,引入了“临界区”的概念(critical section)
对于“临界区”的访问java通常使用synchronized和锁进行。
对于“临界区”的访问策略是,当线程A要访问“临界区”时会先进行判断,如果该“临界区”中有其他的线程存在,那么线程A将休眠等待获得访问许可。
java中,被synchronized修饰的对象将是线程安全的,换句话说:
java类中被synchronized修饰的方法都是该对象的“临界区”,在同一时刻只能有一个线程访问。需要注意的是:
获得锁的线程可以迭代调用其他加锁的的方法
静态方法是特殊的,即没有获得锁的线程也可以访问已经被占用的对象的静态方法,这需要注意