synchronized:
被synchronized修饰的方法为同步方法。
1.假如a对象的x方法被synchronized的修饰,y方法没有被修饰,那么在第一个线程访问x方法获取对象锁的时候,第二个线程不可以访问x方法,但是可以访问y方法。
也就是说,在某个线程已经获取一个对象的对象锁的情况,其他线程只能访问该对象的非synchronized方法,如果要访问,那么需要等待第一个线程执行synchronized方法结束释放锁之后进行争夺。
2.如果是一个类的两个对象,分别被不同的线程访问同一个syn方法,那么都可以访问,事实上两个对象创建了2个线程锁,两个对象之间不会相互干扰。
3.如果一个对象里面有多个synchronized方法,那么当一个线程进入某个synchronized方法获取对象锁的时候,这时候对象锁并没有释放,可以在该方法内部调用其他synchronized方法。
4.当一个线程获取了一个对象的对象锁,如果在运行过程中代码出现未捕获的异常,那么该线程锁占用的对象锁将会得到释放。
5.synchronized关键字不能被继承,如果父类的某个方法被synchronized修饰,该方法被子类重写,但是没有被synchronized修饰,那么子类的方法将不会有同步效果。
synchronized(非this对象other)
1.other对象为对象锁,当多个线程同时执行synchronized(other){}同步代码块呈同步效果。(两个线程一起访问同步代码块)。
2.当一个类中的方法为同步方法,这个类的对象作为其他类中synchronized方法的对象锁时,两者之间呈同步效果。
synchronized修饰静态方法,表示对当前的类上锁,类锁和对象锁是两种不同的锁,两者之间不会呈同步效果。
注:String对象的特性,由于“a”和“a”为同一个对象,所以在传入“a”为同步对象时呈现的是同步效果。