1 问题引入
这样一个场景:在Java中,有多个线程并行读或者写相同的数据,访问相同的文件等等。对于这种情况如果我们不加以控制,是非常容易导致错误的。
在java中,为了解决这个问题,引入临界区概念。所谓临界区是指一个访问共用资源的程序片段,而这些共用资源又无法同时被多个线程访问。
2 解决方案
synchronized,我们谓之锁,主要用来给方法、代码块加锁。当某个方法或者代码块使用synchronized时,那么在同一时刻至多仅有有一个线程在执行该段代码。当有多个线程访问同一对象的加锁方法/代码块时,同一时间只有一个线程在执行,其余线程必须要等待当前线程执行完之后才能执行该代码段。但是,其余线程是可以访问该对象中的非加锁代码块的。
3 原理
在java中为了实现临界区提供了同步机制。当一个线程试图访问一个临界区时,他将使用一种同步机制来查看是不是已经有其他线程进入临界区。
如果没有则他就可以进入临界区,否则他就会被同步机制挂起,指定进入的线程离开这个临界区。
|
|