synchronized同步问题
2017-05-16 11:08
127 查看
synchronized线程同步,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。
假设现有a,b两线程,abc实例化对象(对象中包含非静态同步块,非静态同步方法,非同步方法,静态同步方法,静态同步代码块),def实例化对象(同上)
1.当两个并发线程同时访问某个实例化对象中的synchronized同步代码块时,一个时间内只能有一个线程访问,一个线程等待,直到第一个线程结束。
2.若两线程中的a正在访问非静态同步方法或者非静态同步代码块时,那么b就只能访问非同步方法。此时线程a访问abc对象的非静态同步方法或者非静态同步代码块获得了一个对象锁,这个对象锁没有解开其他线程就不能访问。
3.此时已知,adc和def是同一类的不同实例对象,其中的代码自然一模一样。假设a和b两线程分别访问adc和def两对象中的静态同步方法或静态同步块,若a线程第一时间访问,那么b线程一样会处于等待状态,直到a线程解锁。
4.总结:当两线程一起访问的是同一个实例化对象中的非静态同步方法时,这个时候的线程锁也可以叫做对象锁。当两线程一起访问的是同一个类的静态同步方法时,这个时候的线程锁叫做类锁。
5.类锁:只要是访问了类中的静态同步块就会获得。这个时候类中的静态同步块只能被一个线程访问
对象锁:只要是访问了类的同一个实例化对象才会获得,这个时候类中的非静态同步块只能被一个线程访问
public class Sync {
public void feiSync(Thread th,int i){//普通方法
System.out.println("普通方法:"+th.getName()+","+i);
}
public synchronized void NoSync(Thread th,int i){//非静态同步方法
System.out.println("非静态同步方法:"+th.getName()+","+i);
}
public static synchronized void YesSync(Thread th,int i){//静态同步方法
System.out.println("静态同步方法:"+th.getName()+","+i);
}
}
sys.YesSync(ths,i);
调用同一个实例化对象的YesSync时输出结果为:
静态同步方法:Thread-3,0
静态同步方法:Thread-3,1
静态同步方法:Thread-3,2
静态同步方法:Thread-3,3
静态同步方法:Thread-3,4
静态同步方法:Thread-3,5
静态同步方法:Thread-3,6
静态同步方法:Thread-3,7
静态同步方法:Thread-3,8
静态同步方法:Thread-3,9
静态同步方法:Thread-3,10
静态同步方法:Thread-3,11
静态同步方法:Thread-3,12
静态同步方法:Thread-3,13
静态同步方法:Thread-3,14
静态同步方法:Thread-3,15
静态同步方法:Thread-3,16
静态同步方法:Thread-3,17
静态同步方法:Thread-3,18
静态同步方法:Thread-3,19
静态同步方法:Thread-3,20
静态同步方法:Thread-3,21
静态同步方法:Thread-3,22
静态同步方法:Thread-3,23
静态同步方法:Thread-3,24
静态同步方法:Thread-3,25
静态同步方法:Thread-3,26
静态同步方法:Thread-3,27
静态同步方法:Thread-3,28
静态同步方法:Thread-3,29
静态同步方法:Thread-2,0
静态同步方法:Thread-2,1
静态同步方法:Thread-2,2
静态同步方法:Thread-2,3
静态同步方法:Thread-2,4
静态同步方法:Thread-2,5
静态同步方法:Thread-2,6
静态同步方法:Thread-2,7
静态同步方法:Thread-2,8
静态同步方法:Thread-2,9
静态同步方法:Thread-2,10
静态同步方法:Thread-2,11
静态同步方法:Thread-2,12
静态同步方法:Thread-2,13
静态同步方法:Thread-2,14
静态同步方法:Thread-2,15
静态同步方法:Thread-2,16
静态同步方法:Thread-2,17
静态同步方法:Thread-2,18
静态同步方法:Thread-2,19
静态同步方法:Thread-2,20
静态同步方法:Thread-2,21
静态同步方法:Thread-2,22
静态同步方法:Thread-2,23
静态同步方法:Thread-2,24
静态同步方法:Thread-2,25
静态同步方法:Thread-2,26
静态同步方法:Thread-2,27
静态同步方法:Thread-2,28
静态同步方法:Thread-2,29
显然也会有线程锁。
Sync sy=new Sync();//实例化对象,内含多个同步方法
Sync sy2=new Sync();
当我调用不同实例化对象时输出结果一样:
静态同步方法:Thread-3,0
静态同步方法:Thread-3,1
静态同步方法:Thread-3,2
静态同步方法:Thread-3,3
静态同步方法:Thread-3,4
静态同步方法:Thread-3,5
静态同步方法:Thread-3,6
静态同步方法:Thread-3,7
静态同步方法:Thread-3,8
静态同步方法:Thread-3,9
静态同步方法:Thread-3,10
静态同步方法:Thread-3,11
静态同步方法:Thread-3,12
静态同步方法:Thread-3,13
静态同步方法:Thread-3,14
静态同步方法:Thread-3,15
静态同步方法:Thread-3,16
静态同步方法:Thread-3,17
静态同步方法:Thread-3,18
静态同步方法:Thread-3,19
静态同步方法:Thread-3,20
静态同步方法:Thread-3,21
静态同步方法:Thread-3,22
静态同步方法:Thread-3,23
静态同步方法:Thread-3,24
静态同步方法:Thread-3,25
静态同步方法:Thread-3,26
静态同步方法:Thread-3,27
静态同步方法:Thread-3,28
静态同步方法:Thread-3,29
静态同步方法:Thread-2,0
静态同步方法:Thread-2,1
静态同步方法:Thread-2,2
静态同步方法:Thread-2,3
静态同步方法:Thread-2,4
静态同步方法:Thread-2,5
静态同步方法:Thread-2,6
静态同步方法:Thread-2,7
静态同步方法:Thread-2,8
静态同步方法:Thread-2,9
静态同步方法:Thread-2,10
静态同步方法:Thread-2,11
静态同步方法:Thread-2,12
静态同步方法:Thread-2,13
静态同步方法:Thread-2,14
静态同步方法:Thread-2,15
静态同步方法:Thread-2,16
静态同步方法:Thread-2,17
静态同步方法:Thread-2,18
静态同步方法:Thread-2,19
静态同步方法:Thread-2,20
静态同步方法:Thread-2,21
静态同步方法:Thread-2,22
静态同步方法:Thread-2,23
静态同步方法:Thread-2,24
静态同步方法:Thread-2,25
静态同步方法:Thread-2,26
静态同步方法:Thread-2,27
静态同步方法:Thread-2,28
静态同步方法:Thread-2,29
sys.NoSync(ths,i);
sys.feiSync(ths, i);
当我调用了非synchronized方法时的结果为:
非静态同步方法:Thread-3,0
普通方法:Thread-3,0
非静态同步方法:Thread-3,1
普通方法:Thread-3,1
非静态同步方法:Thread-3,2
普通方法:Thread-3,2
非静态同步方法:Thread-3,3
普通方法:Thread-3,3
非静态同步方法:Thread-3,4
普通方法:Thread-3,4
非静态同步方法:Thread-3,5
普通方法:Thread-3,5
非静态同步方法:Thread-3,6
普通方法:Thread-3,6
非静态同步方法:Thread-3,7
普通方法:Thread-3,7
非静态同步方法:Thread-3,8
普通方法:Thread-3,8
非静态同步方法:Thread-3,9
普通方法:Thread-3,9
非静态同步方法:Thread-3,10
普通方法:Thread-3,10
非静态同步方法:Thread-3,11
普通方法:Thread-3,11
非静态同步方法:Thread-3,12
普通方法:Thread-3,12
非静态同步方法:Thread-3,13
普通方法:Thread-3,13
非静态同步方法:Thread-3,14
普通方法:Thread-3,14
非静态同步方法:Thread-3,15
普通方法:Thread-3,15
非静态同步方法:Thread-3,16
普通方法:Thread-3,16
非静态同步方法:Thread-3,17
普通方法:Thread-3,17
非静态同步方法:Thread-3,18
普通方法:Thread-3,18
非静态同步方法:Thread-3,19
普通方法:Thread-3,19
非静态同步方法:Thread-3,20
普通方法:Thread-3,20
非静态同步方法:Thread-3,21
普通方法:Thread-3,21
非静态同步方法:Thread-3,22
普通方法:Thread-3,22
非静态同步方法:Thread-3,23
普通方法:Thread-3,23
非静态同步方法:Thread-3,24
普通方法:Thread-3,24
非静态同步方法:Thread-2,0
普通方法:Thread-2,0
非静态同步方法:Thread-2,1
普通方法:Thread-2,1
非静态同步方法:Thread-2,2
普通方法:Thread-2,2
非静态同步方法:Thread-2,3
普通方法:Thread-2,3
非静态同步方法:Thread-2,4
普通方法:Thread-2,4
非静态同步方法:Thread-2,5
普通方法:Thread-2,5
非静态同步方法:Thread-2,6
普通方法:Thread-2,6
非静态同步方法:Thread-2,7
普通方法:Thread-2,7
非静态同步方法:Thread-2,8
普通方法:Thread-2,8
非静态同步方法:Thread-2,9
普通方法:Thread-2,9
非静态同步方法:Thread-2,10
普通方法:Thread-2,10
非静态同步方法:Thread-2,11
普通方法:Thread-2,11
非静态同步方法:Thread-2,12
普通方法:Thread-2,12
非静态同步方法:Thread-2,13
普通方法:Thread-2,13
非静态同步方法:Thread-2,14
普通方法:Thread-2,14
非静态同步方法:Thread-2,15
普通方法:Thread-2,15
非静态同步方法:Thread-2,16
普通方法:Thread-2,16
非静态同步方法:Thread-2,17
普通方法:Thread-2,17
非静态同步方法:Thread-2,18
普通方法:Thread-2,18
非静态同步方法:Thread-2,19
普通方法:Thread-2,19
非静态同步方法:Thread-2,20
普通方法:Thread-2,20
非静态同步方法:Thread-2,21
普通方法:Thread-2,21
非静态同步方法:Thread-2,22
普通方法:Thread-2,22
非静态同步方法:Thread-2,23
普通方法:Thread-2,23
非静态同步方法:Thread-2,24
普通方法:Thread-2,24
非静态同步方法:Thread-2,25
普通方法:Thread-2,25
非静态同步方法:Thread-2,26
普通方法:Thread-2,26
非静态同步方法:Thread-2,27
普通方法:Thread-2,27
非静态同步方法:Thread-2,28
普通方法:Thread-2,28
非静态同步方法:Thread-2,29
普通方法:Thread-2,29
非静态同步方法:Thread-3,25
普通方法:Thread-3,25
非静态同步方法:Thread-3,26
普通方法:Thread-3,26
非静态同步方法:Thread-3,27
普通方法:Thread-3,27
非静态同步方法:Thread-3,28
普通方法:Thread-3,28
非静态同步方法:Thread-3,29
普通方法:Thread-3,29
很显然当一个线程访问同步方法时,其他线程可以访问非同步方法,只有当前一个同步方法执行完后,后一个线程才会去执行要访问的同步方法。
假设现有a,b两线程,abc实例化对象(对象中包含非静态同步块,非静态同步方法,非同步方法,静态同步方法,静态同步代码块),def实例化对象(同上)
1.当两个并发线程同时访问某个实例化对象中的synchronized同步代码块时,一个时间内只能有一个线程访问,一个线程等待,直到第一个线程结束。
2.若两线程中的a正在访问非静态同步方法或者非静态同步代码块时,那么b就只能访问非同步方法。此时线程a访问abc对象的非静态同步方法或者非静态同步代码块获得了一个对象锁,这个对象锁没有解开其他线程就不能访问。
3.此时已知,adc和def是同一类的不同实例对象,其中的代码自然一模一样。假设a和b两线程分别访问adc和def两对象中的静态同步方法或静态同步块,若a线程第一时间访问,那么b线程一样会处于等待状态,直到a线程解锁。
4.总结:当两线程一起访问的是同一个实例化对象中的非静态同步方法时,这个时候的线程锁也可以叫做对象锁。当两线程一起访问的是同一个类的静态同步方法时,这个时候的线程锁叫做类锁。
5.类锁:只要是访问了类中的静态同步块就会获得。这个时候类中的静态同步块只能被一个线程访问
对象锁:只要是访问了类的同一个实例化对象才会获得,这个时候类中的非静态同步块只能被一个线程访问
public class Sync {
public void feiSync(Thread th,int i){//普通方法
System.out.println("普通方法:"+th.getName()+","+i);
}
public synchronized void NoSync(Thread th,int i){//非静态同步方法
System.out.println("非静态同步方法:"+th.getName()+","+i);
}
public static synchronized void YesSync(Thread th,int i){//静态同步方法
System.out.println("静态同步方法:"+th.getName()+","+i);
}
}
class Runnables implements Runnable{ private Sync sys=new Sync(); private Thread ths=new Thread(); public Runnables(Sync sys){ this.sys=sys; } @Override public void run() { for (int i = 0; i < 30; i++) { sys.NoSync(ths,i);//两线程一起访问非静态的同步方法,
} } 4000 public void setTh(Thread th){ this.ths=th; } }
public class test { public static void main(String[] args) { Sync sy=new Sync();//实例化对象,内含多个同步方法 Runnables rn1=new Runnables(sy);//线程1 Thread th1=new Thread(rn1); rn1.setTh(th1); th1.start();//启动线程1 Runnables rn2=new Runnables(sy);//线程2 Thread th2=new Thread(rn2); rn1.setTh(th2); th2.start();//启动线程2 } }
调用NoSync()方法时:输出结果为 非静态同步方法:Thread-2,0 非静态同步方法:Thread-2,1 非静态同步方法:Thread-2,2 非静态同步方法:Thread-2,3 非静态同步方法:Thread-2,4 非静态同步方法:Thread-2,5 非静态同步方法:Thread-2,6 非静态同步方法:Thread-2,7 非静态同步方法:Thread-2,8 非静态同步方法:Thread-2,9 非静态同步方法:Thread-2,10 非静态同步方法:Thread-2,11 非静态同步方法:Thread-2,12 非静态同步方法:Thread-2,13 非静态同步方法:Thread-2,14 非静态同步方法:Thread-2,15 非静态同步方法:Thread-2,16 非静态同步方法:Thread-2,17 非静态同步方法:Thread-2,18 非静态同步方法:Thread-2,19 非静态同步方法:Thread-2,20 非静态同步方法:Thread-2,21 非静态同步方法:Thread-2,22 非静态同步方法:Thread-2,23 非静态同步方法:Thread-2,24 非静态同步方法:Thread-2,25 非静态同步方法:Thread-2,26 非静态同步方法:Thread-2,27 非静态同步方法:Thread-2,28 非静态同步方法:Thread-2,29 非静态同步方法:Thread-3,1 非静态同步方法:Thread-3,2 非静态同步方法:Thread-3,3 非静态同步方法:Thread-3,4 非静态同步方法:Thread-3,5 非静态同步方法:Thread-3,6 非静态同步方法:Thread-3,7 非静态同步方法:Thread-3,8 非静态同步方法:Thread-3,9 非静态同步方法:Thread-3,10 非静态同步方法:Thread-3,11 非静态同步方法:Thread-3,12 非静态同步方法:Thread-3,13 非静态同步方法:Thread-3,14 非静态同步方法:Thread-3,15 非静态同步方法:Thread-3,16 非静态同步方法:Thread-3,17 非静态同步方法:Thread-3,18 非静态同步方法:Thread-3,19 非静态同步方法:Thread-3,20 非静态同步方法:Thread-3,21 非静态同步方法:Thread-3,22 非静态同步方法:Thread-3,23 非静态同步方法:Thread-3,24 非静态同步方法:Thread-3,25 非静态同步方法:Thread-3,26 非静态同步方法:Thread-3,27 非静态同步方法:Thread-3,28 非静态同步方法:Thread-3,29 线程执行的先后顺序是一般优先级。
sys.YesSync(ths,i);
调用同一个实例化对象的YesSync时输出结果为:
静态同步方法:Thread-3,0
静态同步方法:Thread-3,1
静态同步方法:Thread-3,2
静态同步方法:Thread-3,3
静态同步方法:Thread-3,4
静态同步方法:Thread-3,5
静态同步方法:Thread-3,6
静态同步方法:Thread-3,7
静态同步方法:Thread-3,8
静态同步方法:Thread-3,9
静态同步方法:Thread-3,10
静态同步方法:Thread-3,11
静态同步方法:Thread-3,12
静态同步方法:Thread-3,13
静态同步方法:Thread-3,14
静态同步方法:Thread-3,15
静态同步方法:Thread-3,16
静态同步方法:Thread-3,17
静态同步方法:Thread-3,18
静态同步方法:Thread-3,19
静态同步方法:Thread-3,20
静态同步方法:Thread-3,21
静态同步方法:Thread-3,22
静态同步方法:Thread-3,23
静态同步方法:Thread-3,24
静态同步方法:Thread-3,25
静态同步方法:Thread-3,26
静态同步方法:Thread-3,27
静态同步方法:Thread-3,28
静态同步方法:Thread-3,29
静态同步方法:Thread-2,0
静态同步方法:Thread-2,1
静态同步方法:Thread-2,2
静态同步方法:Thread-2,3
静态同步方法:Thread-2,4
静态同步方法:Thread-2,5
静态同步方法:Thread-2,6
静态同步方法:Thread-2,7
静态同步方法:Thread-2,8
静态同步方法:Thread-2,9
静态同步方法:Thread-2,10
静态同步方法:Thread-2,11
静态同步方法:Thread-2,12
静态同步方法:Thread-2,13
静态同步方法:Thread-2,14
静态同步方法:Thread-2,15
静态同步方法:Thread-2,16
静态同步方法:Thread-2,17
静态同步方法:Thread-2,18
静态同步方法:Thread-2,19
静态同步方法:Thread-2,20
静态同步方法:Thread-2,21
静态同步方法:Thread-2,22
静态同步方法:Thread-2,23
静态同步方法:Thread-2,24
静态同步方法:Thread-2,25
静态同步方法:Thread-2,26
静态同步方法:Thread-2,27
静态同步方法:Thread-2,28
静态同步方法:Thread-2,29
显然也会有线程锁。
Sync sy=new Sync();//实例化对象,内含多个同步方法
Sync sy2=new Sync();
当我调用不同实例化对象时输出结果一样:
静态同步方法:Thread-3,0
静态同步方法:Thread-3,1
静态同步方法:Thread-3,2
静态同步方法:Thread-3,3
静态同步方法:Thread-3,4
静态同步方法:Thread-3,5
静态同步方法:Thread-3,6
静态同步方法:Thread-3,7
静态同步方法:Thread-3,8
静态同步方法:Thread-3,9
静态同步方法:Thread-3,10
静态同步方法:Thread-3,11
静态同步方法:Thread-3,12
静态同步方法:Thread-3,13
静态同步方法:Thread-3,14
静态同步方法:Thread-3,15
静态同步方法:Thread-3,16
静态同步方法:Thread-3,17
静态同步方法:Thread-3,18
静态同步方法:Thread-3,19
静态同步方法:Thread-3,20
静态同步方法:Thread-3,21
静态同步方法:Thread-3,22
静态同步方法:Thread-3,23
静态同步方法:Thread-3,24
静态同步方法:Thread-3,25
静态同步方法:Thread-3,26
静态同步方法:Thread-3,27
静态同步方法:Thread-3,28
静态同步方法:Thread-3,29
静态同步方法:Thread-2,0
静态同步方法:Thread-2,1
静态同步方法:Thread-2,2
静态同步方法:Thread-2,3
静态同步方法:Thread-2,4
静态同步方法:Thread-2,5
静态同步方法:Thread-2,6
静态同步方法:Thread-2,7
静态同步方法:Thread-2,8
静态同步方法:Thread-2,9
静态同步方法:Thread-2,10
静态同步方法:Thread-2,11
静态同步方法:Thread-2,12
静态同步方法:Thread-2,13
静态同步方法:Thread-2,14
静态同步方法:Thread-2,15
静态同步方法:Thread-2,16
静态同步方法:Thread-2,17
静态同步方法:Thread-2,18
静态同步方法:Thread-2,19
静态同步方法:Thread-2,20
静态同步方法:Thread-2,21
静态同步方法:Thread-2,22
静态同步方法:Thread-2,23
静态同步方法:Thread-2,24
静态同步方法:Thread-2,25
静态同步方法:Thread-2,26
静态同步方法:Thread-2,27
静态同步方法:Thread-2,28
静态同步方法:Thread-2,29
sys.NoSync(ths,i);
sys.feiSync(ths, i);
当我调用了非synchronized方法时的结果为:
非静态同步方法:Thread-3,0
普通方法:Thread-3,0
非静态同步方法:Thread-3,1
普通方法:Thread-3,1
非静态同步方法:Thread-3,2
普通方法:Thread-3,2
非静态同步方法:Thread-3,3
普通方法:Thread-3,3
非静态同步方法:Thread-3,4
普通方法:Thread-3,4
非静态同步方法:Thread-3,5
普通方法:Thread-3,5
非静态同步方法:Thread-3,6
普通方法:Thread-3,6
非静态同步方法:Thread-3,7
普通方法:Thread-3,7
非静态同步方法:Thread-3,8
普通方法:Thread-3,8
非静态同步方法:Thread-3,9
普通方法:Thread-3,9
非静态同步方法:Thread-3,10
普通方法:Thread-3,10
非静态同步方法:Thread-3,11
普通方法:Thread-3,11
非静态同步方法:Thread-3,12
普通方法:Thread-3,12
非静态同步方法:Thread-3,13
普通方法:Thread-3,13
非静态同步方法:Thread-3,14
普通方法:Thread-3,14
非静态同步方法:Thread-3,15
普通方法:Thread-3,15
非静态同步方法:Thread-3,16
普通方法:Thread-3,16
非静态同步方法:Thread-3,17
普通方法:Thread-3,17
非静态同步方法:Thread-3,18
普通方法:Thread-3,18
非静态同步方法:Thread-3,19
普通方法:Thread-3,19
非静态同步方法:Thread-3,20
普通方法:Thread-3,20
非静态同步方法:Thread-3,21
普通方法:Thread-3,21
非静态同步方法:Thread-3,22
普通方法:Thread-3,22
非静态同步方法:Thread-3,23
普通方法:Thread-3,23
非静态同步方法:Thread-3,24
普通方法:Thread-3,24
非静态同步方法:Thread-2,0
普通方法:Thread-2,0
非静态同步方法:Thread-2,1
普通方法:Thread-2,1
非静态同步方法:Thread-2,2
普通方法:Thread-2,2
非静态同步方法:Thread-2,3
普通方法:Thread-2,3
非静态同步方法:Thread-2,4
普通方法:Thread-2,4
非静态同步方法:Thread-2,5
普通方法:Thread-2,5
非静态同步方法:Thread-2,6
普通方法:Thread-2,6
非静态同步方法:Thread-2,7
普通方法:Thread-2,7
非静态同步方法:Thread-2,8
普通方法:Thread-2,8
非静态同步方法:Thread-2,9
普通方法:Thread-2,9
非静态同步方法:Thread-2,10
普通方法:Thread-2,10
非静态同步方法:Thread-2,11
普通方法:Thread-2,11
非静态同步方法:Thread-2,12
普通方法:Thread-2,12
非静态同步方法:Thread-2,13
普通方法:Thread-2,13
非静态同步方法:Thread-2,14
普通方法:Thread-2,14
非静态同步方法:Thread-2,15
普通方法:Thread-2,15
非静态同步方法:Thread-2,16
普通方法:Thread-2,16
非静态同步方法:Thread-2,17
普通方法:Thread-2,17
非静态同步方法:Thread-2,18
普通方法:Thread-2,18
非静态同步方法:Thread-2,19
普通方法:Thread-2,19
非静态同步方法:Thread-2,20
普通方法:Thread-2,20
非静态同步方法:Thread-2,21
普通方法:Thread-2,21
非静态同步方法:Thread-2,22
普通方法:Thread-2,22
非静态同步方法:Thread-2,23
普通方法:Thread-2,23
非静态同步方法:Thread-2,24
普通方法:Thread-2,24
非静态同步方法:Thread-2,25
普通方法:Thread-2,25
非静态同步方法:Thread-2,26
普通方法:Thread-2,26
非静态同步方法:Thread-2,27
普通方法:Thread-2,27
非静态同步方法:Thread-2,28
普通方法:Thread-2,28
非静态同步方法:Thread-2,29
普通方法:Thread-2,29
非静态同步方法:Thread-3,25
普通方法:Thread-3,25
非静态同步方法:Thread-3,26
普通方法:Thread-3,26
非静态同步方法:Thread-3,27
普通方法:Thread-3,27
非静态同步方法:Thread-3,28
普通方法:Thread-3,28
非静态同步方法:Thread-3,29
普通方法:Thread-3,29
很显然当一个线程访问同步方法时,其他线程可以访问非同步方法,只有当前一个同步方法执行完后,后一个线程才会去执行要访问的同步方法。
相关文章推荐
- 同步synchronized的问题
- 记录Java多线程的同步问题---synchronized关键字的使用
- 从头认识java-18.6 synchronized在其它对象上同步和ThreadLocal来消除共享对象的同步问题
- Spring @transactional注解和synchronized同步锁同时使用不能同步的问题
- 并发编程学习笔记二 ------synchronized关键字实现同步访问解决多线程安全问题
- synchronized是解决多线程中同步问题的一个关键字
- 使用synchronized关键字解决共享数据同步问题:多线程门票销售
- java 同步锁问题(synchronized)
- 线程并发-同步synchronized无限等待问题
- day11多线程,run方法。卖票多线程示例。synchronized,同步锁对象,回顾单例。死锁问题
- 若还 不懂 java synchronized 同步,锁,对象wait,notify问题,看完这两段代码,解决问题。
- synchronized——Java多线程的同步问题
- java中同步synchronized的意义,如何用它解决线程不安全的问题
- 从头认识多线程-2.18 synchronized (new object())同步时各种不同类别的监视器以及其引起的问题(常量池的影响)
- java synchronized同步方法调用另一个同步方法,锁机制问题
- Java线程同步(synchronized)——卖票问题
- java多线程学习笔记(三) ——多线程实例火车票问题+同步synchronized初接触
- Java多线程、并发时使用Synchronized(同步锁)解决资源竞争问题
- synchronized对象锁的同步和异步问题
- Java线程同步问题synchronized