永发信息网

java里同步是什么意思

答案:1  悬赏:10  手机版
解决时间 2021-02-15 02:43
java里同步是什么意思
最佳答案
一般有两种方法 同步方法和同步代码块

假设P1、P2是同一个类的不同对象,这个类中定义了以下几种情况的同步块或同步方法,P1、P2就都可以调用它们。

1. 把synchronized当作函数修饰符时,示例代码如下:

Public synchronized void methodAAA()

{

//….

}

这也就是同步方法,那这时synchronized锁定的是哪个对象呢?它锁定的是调用这个同步方法对象。也就是说,当一个对象P1在不同的线程中执行这个同步方法时,它们之间会形成互斥,达到同步的效果。但是这个对象所属的Class所产生的另一对象P2却可以任意调用这个被加了synchronized关键字的方法。

上边的示例代码等同于如下代码:

public void methodAAA()

{

synchronized (this) // (1)

{

//…..

}

}

(1)处的this指的是什么呢?它指的就是调用这个方法的对象,如P1。可见同步方法实质是将synchronized作用于object reference。――那个拿到了P1对象锁的线程,才可以调用P1的同步方法,而对P2而言,P1这个锁与它毫不相干,程序也可能在这种情形下摆脱同步机制的控制,造成数据混乱:(

2.同步块,示例代码如下:

public void method3(SomeObject so)

{

synchronized(so)

{

//…..

}

}

这时,锁就是so这个对象,谁拿到这个锁谁就可以运行它所控制的那段代码。当有一个明确的对象作为锁时,就可以这样写程序,但当没有明确的对象作为锁,只是想让一段代码同步时,可以创建一个特殊的instance变量(它得是一个对象)来充当锁:

class Foo implements Runnable

{

private byte[] lock = new byte[0]; // 特殊的instance变量

Public void methodA()

{

synchronized(lock) { //… }

}

//…..

}

注:零长度的byte数组对象创建起来将比任何对象都经济――查看编译后的字节码:生成零长度的byte[]对象只需3条操作码,而Object lock = new Object()则需要7行操作码。

3.将synchronized作用于static 函数,示例代码如下:

Class Foo

{

public synchronized static void methodAAA() // 同步的static 函数

{

//….

}

public void methodBBB()

{

synchronized(Foo.class) // class literal(类名称字面常量)

}

}

代码中的methodBBB()方法是把class literal作为锁的情况,它和同步的static函数产生的效果是一样的,取得的锁很特别,是当前调用这个方法的对象所属的类(Class,而不再是由这个Class产生的某个具体对象了)。

记得在《Effective Java》一书中看到过将 Foo.class和 P1.getClass()用于作同步锁还不一样,不能用P1.getClass()来达到锁这个Class的目的。P1指的是由Foo类产生的对象。

可以推断:如果一个类中定义了一个synchronized的static函数A,也定义了一个synchronized 的instance函数B,那么这个类的同一对象Obj在多线程中分别访问A和B两个方法时,不会构成同步,因为它们的锁都不一样。A方法的锁是Obj这个对象,而B的锁是Obj所属的那个Class。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
江河里面钓鲫鱼用什么钓鱼小药好
正视眼镜(乐从分店)地址在哪,我要去那里办事
问道壳妖和符灵吃变异精魄后分别会变哪些变异
拍拍贷会自动在支付宝扣钱吗
鲜果源干鲜水果超市怎么去啊,有知道地址的么
雷朋专卖店(百花店)怎么去啊,我要去那办事
【米的妈妈是谁】米的妈妈是谁?米是谁生的?
利君锌业地址在什么地方,想过去办事
当一个男人一直说爱你,但是已经过了热恋期怎
e视眼镜升级店(容桂天佑城店)怎么去啊,我要
有谁在昆山电子厂工作过,介绍介绍工作怎么样
2017怎么改微信号
兰庭主题宾馆在什么地方啊,我要过去处理事情
畅游充值中心怎么查询账号余额
扶手电梯运行中突然停止如何处理
推荐资讯
为什么一看见穿黑丝袜的女人我就性奋啦
长城宽带怎么样 好不好
r乘r除以2等于30怎么解
徽美画院地址在什么地方,我要处理点事
北京银行电子银行密码有几位数
大连市普兰店区大谭动物卫生监督所在什么地方
一个女生说690是什么意思?
想知道伦巴的摆臀与恰恰有什么不同
铜梁少年业余体校体育舞蹈俱乐部地址有知道的
女人脸上露出山根皱纹是什么情况呢?
2019年课本二年级数学上册北师大版答案
银行官方APP从哪里下载比较安全?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?