java对象锁和类锁全面解析(多线程synchronized关键字)-编程开发技术

java对象锁和类锁全面解析(多线程synchronized关键字)-编程开发技术

ID:30768998

大小:126.50 KB

页数:14页

时间:2019-01-03

java对象锁和类锁全面解析(多线程synchronized关键字)-编程开发技术_第1页
java对象锁和类锁全面解析(多线程synchronized关键字)-编程开发技术_第2页
java对象锁和类锁全面解析(多线程synchronized关键字)-编程开发技术_第3页
java对象锁和类锁全面解析(多线程synchronized关键字)-编程开发技术_第4页
java对象锁和类锁全面解析(多线程synchronized关键字)-编程开发技术_第5页
资源描述:

《java对象锁和类锁全面解析(多线程synchronized关键字)-编程开发技术》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Java对象锁和类锁全面解析(多线程synchronized关键字)-编程开发技术Java对象锁和类锁全面解析(多线程synchronized关键字)原文出处:小宝鹄最近工作冇用到一些多线程的东西,Z前吧,冇用到synchronized同步块,不过是别人怎么用就跟着用,并没有搞清楚锁的概念。最近也是遇到一些问题,不搞清楚锁的概念,很容易碰壁,甚至有些吋候自己连用没用对都不知道。今天把一些疑惑都解开了,写篇文章分享给大家,文章还算比较全面。当然可能有小宝鸽理解得不够深入透彻的地方,如果说得不正确述望指出。看Z前

2、冇必要跟某些猿友说一下,如呆看一遍没有看明白呢,也没关系,当是了解一下,等真正使用到了,再冋头看。本文主要是将synchronized关键字用法作为例子来去解释Java中的对象锁和类锁。特别的是希望能帮大家理清一些概念。一、synchronized关键字synchronized关键字冇如下两种用法:1、在需要同步的方法的方法签名中加入synchronized关键字。synchronizedpublicvoidgetValueO{System・out.printin("getValuemethodthreadn

3、ame=z,+Thread・currcntThread().gctNamc()+"username二"+username+"password二〃+password);}上面的代码修饰的synchronized是非静态方法,如果修饰的是静态方法(static)含义是完全不一样的。具体不一样在哪里,后面会详细说清楚。synchronizedstaticpublicvoidgetValueO{System・out.printin("getValuemethodthreadname二"+Thread.currentT

4、hread().getName()+"username二"+username+"password二〃+password);2、使用synchronized块对需要进行同步的代码段进行同步。publicvoidserviceMethod()try{synchronized(this){System,out.println(〃begintime二〃+System.currentTimeMi11is());Thread,sleep(2000);System・out.printin("endend二"+System.

5、currentTimeMillis());}}catch(TnterruptedExceptione){e.printStackTrace();上面的代码块是synchronized(this)用法,还有synchronized(非this对象)以及synchronized(类.class)这两种用法,这些使用方式的含义也是有根本的区别的。我们先带着这些问题继续往下看。二、Java中的对象锁和类锁小宝鸽似乎并没冇办法用清晰简短的语言来描述对象锁和类锁的概念。即便能用简单的语句概况,也会显得抽彖。猿友们耐心看完

6、自然会明口。之前网上有找一些相关资料,有篇博客是这样描述的(看的是转载的,原创连接我也不知道):一段synchronized的代码被一个线程执行Z前,他要先拿到执行这段代码的权限,在Jav「里边就是拿到某个同步对彖的锁(一个对彖只有一把锁);如果这个吋候同步对象的锁被其他线程拿走了,他(这个线程)就只能等了(线程阻塞在锁池等待队列中)。取到锁后,他就开始执行同步代码(被synchronized修饰的代码);线程执行完同步代码后马上就把锁述给同步对象,英他在锁池中等待的某个线程就可以拿到锁执行同步代码了。这样就

7、保证了同步代码在统一吋刻只有一个线程在执行。这段话,除了最后一句,讲得都是挺合理的。”这样就保证了同步代码在统一吋刻只有一个线程在执行。”这句话显然不对,synchronized并非保证同步代码同一时刻只冇一个线程执行,同步代码同一时刻应该可以冇多个线程执行。上面提到锁,这里先引出锁的概念。先來看看下面这些啰嗦而必不可少的文字。多线程的线程同步机制实际上是靠锁的概念来控制的。在Java程序运行时环境屮,JVM需要对两类线程共享的数据进行I■办调:1)保存在堆中的实例变量2)保存在方法区小的类变量这两类数据是被

8、所有线程共享的。(程序不需要协调保存在Java栈当小的数据。因为这些数据是屈于拥有该栈的线程所私有的。)这里插播一下广告:关于JVM内存,如果想了解可以看看I■専主的另外一篇文章:Java内存管理:http://blog.csdn.net/uO13142781/article/deta订s/50830754方法区(MethodArea)与Java■堆一样,是各个线程共享的内存区域,它用于存储已被虚拟

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。