仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 407|回复: 9
打印 上一主题 下一主题

[学习教程] 来看深切了解Java内存模子(六) final

[复制链接]
若天明 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:01:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
因为能用到多少功能就用多少,不能用就不用!总的来说:要简单要性能好,可以不用框架。你说java复杂,就是因为你把java(j2ee)与这些框架混在了一起。
与后面先容的锁和volatile比拟较,对final域的读和写更像是一般的变量会见。关于final域,编译器和处置器要恪守两个重排序划定规矩:
在机关函数内对一个final域的写进,与随后把这个被机关对象的援用赋值给一个援用变量,这两个操作之间不克不及重排序。
初度读一个包括final域的对象的援用,与随后初度读这个final域,这两个操纵之间不克不及重排序。
上面,我们经由过程一些示例性的代码来分离申明这两个划定规矩:
  1. publicclassFinalExample{
  2. inti;//一般变量
  3. finalintj;//final变量
  4. staticFinalExampleobj;
  5. publicvoidFinalExample(){//机关函数
  6. i=1;//写一般域
  7. j=2;//写final域
  8. }
  9. publicstaticvoidwriter(){//写线程A实行
  10. obj=newFinalExample();
  11. }
  12. publicstaticvoidreader(){//读线程B实行
  13. FinalExampleobject=obj;//读对象援用
  14. inta=object.i;//读一般域
  15. intb=object.j;//读final域
  16. }
  17. }
复制代码
这里假定一个线程A实行writer()办法,随后另外一个线程B实行reader()办法。上面我们经由过程这两个线程的交互来讲明这两个划定规矩。
写final域的重排序划定规矩
写final域的重排序划定规矩禁止把final域的写重排序到机关函数以外。这个划定规矩的完成包括上面2个方面:
JMM克制编译器把final域的写重排序到机关函数以外。
编译器会在final域的写以后,机关函数return之前,拔出一个StoreStore屏蔽。这个屏蔽克制处置器把final域的写重排序到机关函数以外。
如今让我们剖析writer()办法。writer()办法只包括一行代码:finalExample=newFinalExample()。这行代码包括两个步骤:
机关一个FinalExample范例的对象;
把这个对象的援用赋值给援用变量obj。
假定线程B读对象援用与读对象的成员域之间没有重排序(即刻会申明为何必要这个假定),下图是一种大概的实行时序:

在上图中,写一般域的操纵被编译重视排序到了机关函数以外,读线程B毛病的读取了一般变量i初始化之前的值。而写final域的操纵,被写final域的重排序划定规矩“限制”在了机关函数以内,读线程B准确的读取了final变量初始化以后的值。
写final域的重排序划定规矩能够确保:在对象援用为恣意线程可见之前,对象的final域已被准确初始化过了,而一般域不具有这个保证。以上图为例,在读线程B“看到”对象援用obj时,极可能obj对象还没有机关完成(对一般域i的写操纵被重排序到机关函数外,此时初始值2还没有写进一般域i)。
<p>
首先第一点:jsp,servlet,javabean这些最基本的,嘿嘿,就算你是高手的话,在大行的企业级应用的话还是需要框架的,一个好的框架确实能构解决许多问题。
若相依 该用户已被删除
沙发
发表于 2015-1-20 12:45:19 | 只看该作者
设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
只想知道 该用户已被删除
板凳
发表于 2015-1-23 16:13:50 | 只看该作者
是一种使网页(Web Page)产生生动活泼画面的语言
地板
发表于 2015-1-31 18:15:16 | 只看该作者
还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
变相怪杰 该用户已被删除
5#
发表于 2015-2-2 16:18:10 | 只看该作者
设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
分手快乐 该用户已被删除
6#
发表于 2015-2-8 00:55:47 | 只看该作者
是一种突破用户端机器环境和CPU
小女巫 该用户已被删除
7#
发表于 2015-2-23 20:16:17 | 只看该作者
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
再现理想 该用户已被删除
8#
发表于 2015-3-7 10:08:37 | 只看该作者
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
不帅 该用户已被删除
9#
发表于 2015-3-14 20:35:15 | 只看该作者
J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
兰色精灵 该用户已被删除
10#
发表于 2015-3-21 14:04:19 | 只看该作者
一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-28 13:15

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表