同步指的是多线程情况,一个线程块在一定时间内只能在一个线程内执行。java支持多线程执行,这就可能会导致两个或者多个线程访问同一个区域或者代码。同步是一个让所有并发的线程同步执行的过程。同步避免由共享内存不一致导致的内存错误,当一个方法被声明为同步的时候,线程保存着那个方法对象的监控,如果另一个线程正在执行这个同步方法,那么你的线程将会堵塞直到那个线程释放这个监控。
在java中同步由synchronized关键字实现的,你可以在你类中的方法或者块上使用synchronized关键字,关键字不能在类定义的变量或者属性上使用。
public class DemoClass { public synchronized void demoMethod(){} } or public class DemoClass { public void demoMethod(){ synchronized (this) { //other thread safe code } } } or public class DemoClass { private final Object lock = new Object(); public void demoMethod(){ synchronized (lock) { //other thread safe code } } }
public class DemoClass { public synchronized static void demoMethod(){} } or public class DemoClass { public void demoMethod(){ synchronized (DemoClass.class) { //other thread safe code } } } or public class DemoClass { private final static Object lock = new Object(); public void demoMethod(){ synchronized (lock) { //other thread safe code } } }