http://www.mianwww.com/html/2011/10/10790.html
java同步和互斥 : 共享数据的并发处理
两个线程修改共享资源时会出现数据的不一致,为避免这种现象采用对访问的线程做限制的方法。利用每个对象都有一个monitor(锁标记),当线程拥有这个锁标记时才能访问这个资源,没有锁标记便进入锁池。
1.Synchronized修饰代码块
public void push(char c){
synchronized(this){
…
}
}
对括号内的对象加锁,只有拿到锁标记的对象才能执行该代码块
2.Synchronized修饰方法
public synchronized void push(char c) {
…
}
对当前对象的加锁,只有拿到锁标记的对象才能执行该方法
注:方法的Synchronized特性本身不会被继承,只能覆盖。
线程因为未拿到锁标记而发生阻塞进入锁池(lock pool)。每个对象都有自己的一个锁池的空间,用于放置等待运行的线程。由系统决定哪个线程拿到锁标记并运行。

本文探讨了Java中实现线程安全的两种主要方式:同步和互斥。通过使用synchronized关键字来锁定对象,确保同一时刻只有一个线程可以访问特定的代码块或方法,从而避免了多个线程同时修改共享资源导致的数据不一致性问题。
9万+

被折叠的 条评论
为什么被折叠?



