1、对代码块加锁
对共同持有的对象加锁可以把内部类写成这样的
- public class Outerput{
- public void print(String name){
- synchronized (this) {
- for(int i = 0;i < name.length(); i++){
- System.out.print(name.charAt(i));
- }
- System.out.println();
- }
- }
- }
|
2、对非静态方法加锁,加锁的对象是this
- public class Outerput{
- public synchronized void print(String name){
- for(int i = 0;i < name.length(); i++){
- System.out.print(name.charAt(i));
- }
- System.out.println();
- }
- }
|
3、对静态方法加锁的对象到底是谁?
- public static synchronized void print2(String name){
- for(int i = 0;i < name.length(); i++){
- System.out.print(name.charAt(i));
- }
- System.out.println();
- }
|
其实加锁的对象是字节码对象,Outerput.class
如果和非静态方法同时持有同一个对象时,可以持有同一个字节码对象。