线程的通信主要是通过共享数据域和对象的引用域。这种通信方法是很高效的,但同时也有可能造成两种错误:线程冲突和内存一致性异常,用来解决这种问题的工具就是synchronization这个机制。
java程序提供两个基本的Synchronized语法,Synchronized方法和Synchronized表达式;
要让一个java方法具有Synchronized性,在声明时加上Synchronized修饰符即可
public class SynchronizedCounter {
private int c = 0;
public synchronized void increment() {
c++;
}
public synchronized void decrement() {
c--;
}
public synchronized int value() {
return c;
}
}
比如counter是SynchronizedCounter的一个实例,那么它的Synchronized方法具有两个特性:
1.两个实现了Synchronized的方法就不会再交替运行;当一个对象的Synchronized方法被一个线程调用执行,那么其他的线程要执行这个对象的这个方法就会被阻塞(暂停执行)