问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

经常会听到Java锁这个词,但给自己的感觉很朦胧,有办法清楚的了解它吗?大虾们给个建议!!!

发布网友 发布时间:2022-04-23 01:40

我来回答

2个回答

热心网友 时间:2023-10-10 10:02

java锁机制Synchronized
打个比方:一个object就像一个大房子,大门永远打开。房子里有很多房间(也就是方法)。这些房间有上锁的(synchronized方法), 和不上锁之分(普通方法)。房门口放着一把钥匙(key),这把钥匙可以打开所有上锁的房间。另外我把所有想调用该对象方法的线程比喻成想进入这房子某个 房间的人。所有的东西就这么多了,下面我们看看这些东西之间如何作用的。

在此我们先来明确一下我们的前提条件。该对象至少有一个synchronized方法,否则这个key还有啥意义。当然也就不会有我们的这个主题了。

一个人想进入某间上了锁的房间,他来到房子门口,看见钥匙在那儿(说明暂时还没有其他人要使用上锁的房间)。于是他走上去拿到了钥匙,并且按照自己 的计划使用那些房间。注意一点,他每次使用完一次上锁的房间后会马上把钥匙还回去。即使他要连续使用两间上锁的房间,中间他也要把钥匙还回去,再取回来。

因此,普通情况下钥匙的使用原则是:“随用随借,用完即还。”

这时其他人可以不受*的使用那些不上锁的房间,一个人用一间可以,两个人用一间也可以,没*。但是如果当某个人想要进入上锁的房间,他就要跑到大门口去看看了。有钥匙当然拿了就走,没有的话,就只能等了。

要是很多人在等这把钥匙,等钥匙还回来以后,谁会优先得到钥匙?Not guaranteed。象前面例子里那个想连续使用两个上锁房间的家伙,他中间还钥匙的时候如果还有其他人在等钥匙,那么没有任何保证这家伙能再次拿到。 (JAVA规范在很多地方都明确说明不保证,象Thread.sleep()休息后多久会返回运行,相同优先权的线程那个首先被执行,当要访问对象的锁被 释放后处于等待池的多个线程哪个会优先得到,等等。我想最终的决定权是在JVM,之所以不保证,就是因为JVM在做出上述决定的时候,绝不是简简单单根据 一个条件来做出判断,而是根据很多条。而由于判断条件太多,如果说出来可能会影响JAVA的推广,也可能是因为知识产权保护的原因吧。SUN给了个不保证 就混过去了。无可厚非。但我相信这些不确定,并非完全不确定。因为计算机这东西本身就是按指令运行的。即使看起来很随机的现象,其实都是有规律可寻。学过 计算机的都知道,计算机里随机数的学名是伪随机数,是人运用一定的方法写出来的,看上去随机罢了。另外,或许是因为要想弄的确定太费事,也没多大意义,所 以不确定就不确定了吧。)

1、synchronized关键字的作用域有二种:
1)是某个对象实例内,synchronized aMethod(){}可以防止多个线程同时访问这个对象的synchronized方法(如果一个对象有多个synchronized方法,只要一个线程访问了其中的一个synchronized方法,其它线程不能同时访问这个对象中任何一个synchronized方法)。这时,不同的对象实例的synchronized方法是不相干扰的。也就是说,其它线程照样可以同时访问相同类的另一个对象实例中的synchronized方法;
2)是某个类的范围,synchronized static aStaticMethod{}防止多个线程同时访问这个类中的synchronized static 方法。它可以对类的所有对象实例起作用。

2、除了方法前用synchronized关键字,synchronized关键字还可以用于方法中的某个区块中,表示只对这个区块的资源实行互斥访问。用法是: synchronized(this){/*区块*/},它的作用域是当前对象;

3、synchronized关键字是不能继承的,也就是说,基类的方法synchronized f(){} 在继承类中并不自动是synchronized f(){},而是变成了f(){}。继承类需要你显式的指定它的某个方法为synchronized方法;

synchronized的一个简单例子

public class TextThread
{

/**
* @param args
*/
public static void main(String[] args)
{
// TODO 自动生成方法存根
TxtThread tt = new TxtThread();
new Thread(tt).start();
new Thread(tt).start();
new Thread(tt).start();
new Thread(tt).start();
}

}
class TxtThread implements Runnable
{
int num = 100;
String str = new String();
public void run()
{
while (true)
{
synchronized(str)
{
if (num>0)
{
try
{
Thread.sleep(10);
}
catch(Exception e)
{
e.getMessage();
}
System.out.println(Thread.currentThread().getName()+ "this is "+ num--);
}
}
}
}
}

上面的例子中为了制造一个时间差,也就是出错的机会,使用了Thread.sleep(10)

总的说来,synchronized关键字可以作为函数的修饰符,也可作为函数内的语句,也就是平时说的同步方法和同步语句块。如果再细的分类,synchronized可作用于instance变量、object reference(对象引用)、static函数和class literals(类名称字面常量)身上。追问问几个很纠结的问题 为什么会有Java锁的存在?Java锁在程序中能做什么,有什么好处?以前对它了解太少了

追答synchronized 是一个方法修饰符
使用了这个修饰符的方法在同一时间只能有一个线程使用,也就是说这个方法不能在同一时间内多次执行.这样主要可以保证共享型数据的安全问题. 和操作系统中讲的"锁"一样,为了防止多个线程同时操作某一个数据带来问题,在某一个线程进行操作时,其他线程只能等待.
搞清楚synchronized锁定的是哪个对象,就能帮助我们设计更安全的多线程程式。
我们需要明确几点:
A.无论synchronized关键字加在方法上还是对象上,他取得的锁都是对象,而不是把一段代码或函数当作锁――而且同步方法很可能还会被其他线程的对象访问。
B.每个对象只有一个锁(lock)和之相关联。
C.实现同步是要很大的系统开销作为代价的,甚至可能造成死锁,所以尽量避免无谓的同步控制。
和同步有关的内容并不是那么容易能通过一两个例子能解释清楚的,请参考相关书籍,多多练习才能慢慢掌握。

热心网友 时间:2023-10-10 10:02

不太可能吧 这样的话Java要调很多底层的API

这个东西应该是参考一下WindowsAPI才能做 不过这大多属于C++开发的内容
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
步步高学习机@iboxH2 H2学习机的屏幕大小? 6-7万左右纯电 女生想买台便宜的小车在城市代步,有什么好推荐?电动车最好? 河南德盛智能环保科技有限公司怎么样? 深圳市德盛铭电科技有限公司怎么样? pvc防水门生产厂家哪个好呢? 晋江市德顺陶瓷建材有限公司简介 酒店家具厂家 梨子酿酒最简单的方法 Java锁的几种应用 说说java锁有哪些种类,以及区别 java 对象锁和方法锁有什么区别 如何使用java的锁机制 java中的锁有哪几种 java中的lock锁,多次获得,只unlock一次,会有什么效果 Java中有哪些锁,区别是什么 JAVA锁有哪些种类,以及区别 唯品会月度账单可以删除吗? 小龙虾和普通的虾有何区别?一共有哪些虾?常见的可养殖虾品种有哪些? 龙虾是海虾吗? 小龙虾是虾吗?它的学名是什么? 大龙虾和普通大虾吃起来口感味道 有啥不同? 泰医简述体内的糖、脂肪和蛋白质(氨基酸)三者在代谢上的相互关系 龙虾是龙还是虾? 苏氨酸是生糖氨基酸,还是生糖兼生酮氨基酸? 大虾是龙虾吗 龙虾和虾有什么区别? 下述氨基酸除哪种外,都是生糖氨基酸或生糖兼生酮氨基酸?? 龙虾和对虾一个概念吗 java 多线程什么是锁 Java的锁机制有什么用 java中共享锁与无锁的区别? java为什么要对对象加锁 java中文件加锁机制是怎么实现的。 Java多线程中,锁是什么,所谓的获取锁是什么意思 JAVA多线程中“锁”的概念的理解 JAVA锁机制 有小例子说明最好! java锁的可见性的是怎么保证的 java中如何锁住一个文件不让其他程序修改 wps怎么把文本转换成表格 怎样把wps文字转换成wps表格? 怎么把手机wpsword转换为Excel文档? 香椿用开水烫过后可以保存多久?怎么保存? 香椿的如何保存一年四季都可以吃到? 香椿如何保存? 香椿可以冷冻保存吗? 怎么保存新鲜的香椿? 忘记了股票交易密码和资金账号怎么办 股票交易密码和通讯密码忘了怎么办