Java的synchronized关键字怎么用?
发布网友
发布时间:2022-05-02 04:06
我来回答
共5个回答
热心网友
时间:2022-06-28 01:31
你好,这个问题也曾经困扰过我,在网上找到了一个这样的例子,让我很好地理解了了synchronized。
大致的意思是这样的:一个object就像一个大房子,大门永远打开。房子里有 很多房间(也就是方法)。这些房间有上锁的(synchronized方法), 和不上锁之分(普通方法)。房门口放着一把钥匙(key),这把钥匙可以打开所有上锁的房间。另外我把所有想调用该对象方法的线程比喻成想进入这房子某个 房间的人,一个人想进入某间上了锁的房间,他来到房子门口,看见钥匙在那儿(说明暂时还没有其他人要使用上锁的 房间)。于是他走上去拿到了钥匙,并且按照自己 的计划使用那些房间。注意一点,他每次使用完一次上锁的房间后会马上把钥匙还回去。即使他要连续使用两间上锁的房间,中间他也要把钥匙还回去,再取回来。
因此,普通情况下钥匙的使用原则是:“随用随借,用完即还。”
这时其他人可以不受*的使用那些不上锁的房间,一个人用一间可以,两个人用一间也可以,没*。但是如果当某个人想要进入上锁的房间,他就要跑到大门口去看看了。有钥匙当然拿了就走,没有的话,就只能等了。
参考资料:网上博文
热心网友
时间:2022-06-28 01:31
我的理解是
sychronized 用来防止在并发的时候,两个以上的线程同时访问同一个资源。而里面的参数就是来标识作用的。举个例子:第一种情况: a 函数 sychronized(对象A),b函数 sychronized(对象B),那么在某个线程调用a函数的时候,其它的线程不能再访问a函数了,但可以访问b函数。第二种情况: a 函数 sychronized(对象A),b函数 sychronized(对象A),那么在某个线程调用a函数的时候,其它函数既不能访问a函数,也不能访问b函数。
请大家指正。
热心网友
时间:2022-06-28 01:32
synchronized
关键字,代表这个方法加锁,相当于不管哪一个线程a每次运行到这个方法时,都要检查有没有其它正在用这个方法或者其它synchronized方法的线程b(或者c
d等),有的话要等正在使用synchronized方法的线程b(或者c
d)运行完这个方法后再运行此线程a,没有的话,直接运行
它包括两种用法:synchronized
方法和
synchronized
块。
热心网友
时间:2022-06-28 01:32
这个关键字是用来锁定一个关键字或方法,就是大家都来访问调用这个对象或方法时,一次只能有一个人使用,剩余的人在后面排队。
避免多线程使用时造成数据出错。
热心网友
时间:2022-06-28 01:33
java的多线程机制