同步方法和同步代码块的区别是什么?
区别:同步方法默认用this或者当前类class对象作为锁;同步代码块可以选择以什么来加锁,比同步方法要更细颗粒度,我们可以选择只同步会发生同步问题的部分代码而不是整个方法;同步方法使用关键字 synchronized修饰方法,而同步代码块主要是修饰需要进行同步的代码,用 synchronized(object){代码内容}进行修饰;
看这个冲刺面试
我在长沙,想学ui,有没有推荐的培训机构
同步代码块使用的锁是任意对象Object。 同步函数使用的锁是this。 使用静态修饰的同步函数使用的是该类所在的字节码文件对象,格式为类名.class。
同步方法锁的是当前对象,当一个线程使用该对象的同步方法时,会获得该对象的锁,其他线程不能访问该对象的同步方法(只有获得该对象的锁才可以访问同步方法,但可以访问该对象的非同步方法)如果并发量大的话,效率很低,因为如果要访问没有冲突的方法时本来不会和之前的操作产生冲突,但因为没有该对象的锁,所以要等待获得该对象的锁,白白地浪费时间而同步代码块可以选择要同步的代码块,粒度更小,可以避免上面出现的问题
从浏览器输入URL到展示页面的全流程是怎么样的?
请你谈谈Cookie的弊端
北京有一条1公里长的街道,你认为一天能收多少钱的停车费?
怎么理解产品经理与技术研发之间的关系?
看这个冲刺面试
我在长沙,想学ui,有没有推荐的培训机构
区别:
同步方法默认用this或者当前类class对象作为锁;
同步代码块可以选择以什么来加锁,比同步方法要更细颗粒度,我们可以选择只同步会发生同步问题的部分代码而不是整个方法;
同步方法使用关键字 synchronized修饰方法,而同步代码块主要是修饰需要进行同步的代码,用 synchronized(object){代码内容}进行修饰;
同步代码块使用的锁是任意对象Object。 同步函数使用的锁是this。 使用静态修饰的同步函数使用的是该类所在的字节码文件对象,格式为类名.class。
同步方法锁的是当前对象,当一个线程使用该对象的同步方法时,会获得该对象的锁,其他线程不能访问该对象的同步方法(只有获得该对象的锁才可以访问同步方法,但可以访问该对象的非同步方法)
如果并发量大的话,效率很低,因为如果要访问没有冲突的方法时本来不会和之前的操作产生冲突,但因为没有该对象的锁,所以要等待获得该对象的锁,白白地浪费时间
而同步代码块可以选择要同步的代码块,粒度更小,可以避免上面出现的问题