Synchronized关键字
synchronized提供的是排它的、不公平的、可重入的锁,这是JAVA对象内含的锁对象.
Keep in mind that using synchronized on methods is really just shorthand (assume class is SomeClass)
1synchronized static void foo() { ...}
is the same as
1
static void foo() { synchronized(SomeClass.class) { ... }}
and
1
synchronized void foo() { ...}
is the same as
1
void foo() { synchronized(this) { ... }}
happens-before
happends-before关系是一种保证关系,它保证一个语句的执行结果对另一个语句可见,其本质是一种可见性保证。以下几种情况均存在这种关系:
在同一个线程中执行的语句,自动拥有happends-before的关系
对锁的unlock操作和随后对同一个锁的lock操作有happens-before关系,由于这种关系有传递性,因此在unlock之前的所有操作对lock之后所有的操作可见
对volatile变量的写操作和随后对它的读操作有happens-before关系
线程的start操作和线程中执行的所有操作有happens-before关系
被调用了join操作的线程, 它执行的所有操作对调用该(join)操作的线程有happens-before关系