线程8锁,超详细。
1.两个线程调用同一个对象的两个同步方法
结果是:one two
分析:第一个线程调用了getOne方法,获得了number对象的互斥锁,第二个线程等待第一个线程的getOne执行
完毕后,再执行getTow方法
2.
结果: 休眠1秒钟 后 one two
分析:线程1的Thread.sleep不释放互斥锁
3.新增一个线程调用新增的一个普通方法
结果是:three 休眠1秒 one two
分析:没有synchronized修饰的方法,线程调用时是和锁无关的
4.两个线程调用两个对象的同步方法,其中一个方法有Thread.sleep()
结果:two 休眠1秒 one
分析:两个number对象,每个对象都有自己的互斥锁。
5.将有Thread.sleep()的方法设置为static方法,并且让两个线程用同一个对象调用两个方法
结果: two 休眠1秒 one
分析:线程1调用了synchronized修饰的静态方法,获得的是Number类锁(类对象的互斥锁) ;线程2调用了
synchronized修饰非静态方法,获得的是number对象的互斥锁
6.将两个方法均设置为static方法,并且让两个线程用同一个对象调用两个方法
结果: 休眠1秒 one two
分析:两个线程调用的都是sync修饰的静态方法,获得的都是类锁
7.将两个方法中有Thread.sleep()的方法设置为static方法,另一个方法去掉static修饰,让两个线程用两个对象 调用两个方法
结果: two 休眠1秒钟 one
分析:线程1 获得的是类锁 ;线程2获得的是numbertwo的锁
8.将两个方法均设置为static方法,并且让两个线程用两个不同的对象调用两个方法
结果: 休眠1秒 one two
分析:两个线程获得的都是类锁