首页 > 试题广场 >

介绍一下Syncronized锁,如果用这个关键字修饰一个静

[问答题]
请你介绍一下Syncronized锁,如果用这个关键字修饰一个静态方法,锁住了什么?如果修饰成员方法,锁住了什么?
synchronized是java的关键字,可以修饰于代码块,实例方法,静态方法。作用是为修饰的方法加锁,提供线程安全。
发表于 2019-05-02 00:50:55 回复(0)
更多回答
synchronized是java的关键字,可以修饰于代码块,实例方法,静态方法。作用是为修饰的方法加锁,提供线程安全。
发表于 2019-03-01 08:44:36 回复(0)
这是比较基础的题目:
如果有用javap 查看class的同学可以明显看到,如果是修饰代码块,我们能看到moniterenter和moniterexit指令,意味着它在尝试获取moniter对线监视器【指定的加锁对象】
而修饰方法的时候并没有上述俩个指令而是ACC_SYNCHRONIZED
区别在于实例方法锁住的是当前对象,静态方法是当前类加锁。
发表于 2019-01-22 16:33:56 回复(0)

在synchronized里面,包含有三种常见的锁状态:

对于普通的同步方法: 
锁是当前的对象 
对于静态函数的同步方法: 
锁是指引用当前类的class对象 
对于同步方法块的内容: 
锁是指Synchonized括号里配置的对象

发表于 2019-01-16 16:10:28 回复(0)
    在代码块上面加上Syncronized该代码块就称为同步代码块。
    在方法上面加上Syncronized该方法就称为同步函数。
    同步函数又分为两类:
        非静态同步函数:使用this锁。
        静态同步函数:使用当前自届满文件。
    对于静态方法,锁住的是当前字节码文件(当前类.class);
    对于修饰成员方法,锁住的是当前对象(即this);
发表于 2019-07-15 11:31:16 回复(0)

1. 同步一个代码块它只作用于同一个对象,如果调用两个对象上的同步代码块,就不会进行同步。

2. 同步一个方法它和同步代码块一样,作用于同一个对象。

3. 同步一个类作用于整个类,也就是说两个线程调用同一个类的不同对象上的这种同步语句,也会进行同步。

4. 同步一个静态方法作用于整个类。


发表于 2019-06-17 19:43:03 回复(0)
同步方法的同步锁是谁?
对于非static方法,同步锁就是this;
对于static方法,同步锁就是我们使用当前方法所在类的字节码对象(类名.class);
this是创建对象之后产生的,静态方法优先于对象。
发表于 2020-07-07 10:45:24 回复(0)
静态方法修饰时是调用类锁,线程执行的是同步代码块,需要获取类锁。 成员方法修饰的是调用当前方法,需要获取的是对象锁。
编辑于 2019-05-10 20:51:02 回复(0)
静态方法,锁是当前的class对象。成员方法,锁是对象
发表于 2019-01-30 11:48:55 回复(0)
Syncronized是一个对象锁,如果用这个关键字修饰一个静态方法,锁住的是class对象,如果修饰普通成员方法,锁住的是实例对象,应该是这样的,有不对的地方望纠正
发表于 2019-01-16 09:36:55 回复(0)
发表于 2019-01-16 09:07:16 回复(0)