我正在学习java多线程,我发现很难理解同步块是如何工作的:
synchronized(Object o){
// do something
}
请给出一些示例代码,可以告诉我对象o被阻塞了。根据我的理解,从另一个线程访问对象o会在同步块被执行时被阻塞吗?
发布于 2015-11-12 14:16:25
同步描述的是,如果一个对象或块被声明为已同步,则只有一个进程可以在锁定时访问该对象或块,其他进程可以获取该对象或块,直到它可用为止。每个对象都有一个名为“time.No”的标志,具有两种状态设置和复位。当一个进程请求一个对象时,它会检查锁定值是设置还是重置。依赖于这一个对象可用于同步中的进程。为了更好地理解示例,您可以查看此链接。enter link description here
发布于 2016-07-25 21:54:52
由于大多数答案已经涵盖了synchronized的含义,所以我想补充一点,这一点没有提到。同步一个方法或用synchronized封装一个块可以确保操作/操作集作为单个原子操作执行,更准确地说,当一个线程在对象上执行synchronize块时,其他线程不能进入该块,直到线程完成其执行并释放它在进入块时所持有的锁。
因此synchronize块确保了一串代码语句原子性。
与@lucifier指定的不同,同步和易失性并不具有相同的目的,易失性是为了确保两个线程相互通信并从主内存中获取最大的更新值,而不是从单独的cache.it访问值也确保了执行的“发生在之前”行为。
例如,将一个变量定义为易失性(易失性int i=10;),或者在一个非同步方法中执行一个增量操作(i++;),当(i++)被封装在一个同步块中时,它不会给出相同的行为。
https://stackoverflow.com/questions/8161896
复制相似问题