??xml version="1.0" encoding="utf-8" standalone="yes"?>黄色污网站在线观看,日韩电影网址,日韩中文avhttp://www.aygfsteel.com/casta/category/33082.htmlzh-cnMon, 10 Nov 2008 21:12:02 GMTMon, 10 Nov 2008 21:12:02 GMT60Java同步机制谈――synchronized对代码媄?/title><link>http://www.aygfsteel.com/casta/archive/2008/11/10/239651.html</link><dc:creator>casta</dc:creator><author>casta</author><pubDate>Mon, 10 Nov 2008 05:54:00 GMT</pubDate><guid>http://www.aygfsteel.com/casta/archive/2008/11/10/239651.html</guid><wfw:comment>http://www.aygfsteel.com/casta/comments/239651.html</wfw:comment><comments>http://www.aygfsteel.com/casta/archive/2008/11/10/239651.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/casta/comments/commentRss/239651.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/casta/services/trackbacks/239651.html</trackback:ping><description><![CDATA[  Java对多U程的支持与同步机制深受大家的喜爱,g看v来用了synchronized关键字就可以L地解军_U程׃n数据同步问题。到底如何?――还得对synchronized关键字的作用q行深入了解才可定论?br /> ȝ说来Qsynchronized关键字可以作为函数的修饰W,也可作ؓ(f)函数内的语句Q也是qx说的同步Ҏ(gu)和同步语句块。如果再l的分类Q?synchronized可作用于instance变量、object referenceQ对象引用)、static函数和class literals(cdU字面常?w上?br /> 在进一步阐qC前,我们需要明几点:(x)<br /> AQ无论synchronized关键字加在方法上q是对象上,它取得的锁都是对象,而不是把一D代码或函数当作锁――而且同步Ҏ(gu)很可能还?x)被其他U程的对象访问?br /> BQ每个对象只有一个锁QlockQ与之相兌?br /> CQ实现同步是要很大的pȝ开销作ؓ(f)代h(hun)的,甚至可能造成死锁Q所以尽量避免无谓的同步控制?br /> 接着来讨论synchronized用到不同地方对代码生的影响Q?br /> 假设P1、P2是同一个类的不同对象,q个cM定义了以下几U情늚同步块或同步Ҏ(gu)QP1、P2都可以调用它们?br /> 1Q?把synchronized当作函数修饰W时Q示例代码如下:(x)<br /> Public synchronized void methodAAA() {<br />   //….<br /> }<br /> q也是同步Ҏ(gu)Q那q时synchronized锁定的是哪个对象呢?它锁定的是调用这个同步方法对象。也是_(d)当一个对象P1在不同的U程中执行这个同步方法时Q它们之间会(x)形成互斥Q达到同步的效果。但是这个对象所属的Class所产生的另一对象P2却可以Q意调用这个被加了 synchronized关键字的Ҏ(gu)?br /> 上边的示例代码等同于如下代码Q?br /> public void methodAAA() {<br />   synchronized (this) // (1)<br />     {<br />      //…..<br />   }<br /> }<br /> (1)处的this指的是什么呢Q它指的是调用q个Ҏ(gu)的对象,如P1。可见同步方法实质是synchronized作用于object reference。――那个拿CP1对象锁的U程Q才可以调用P1的同步方法,而对P2而言QP1q个锁与它毫不相qԌE序也可能在q种情Ş下摆脱同步机制的控制Q造成数据混ؕQ(<br /> 2Q同步块Q示例代码如下:(x)<br /> public void method3(SomeObject so) {<br />    synchronized(so) {<br />      //…..<br />    }<br /> }<br /> q时Q锁是soq个对象Q谁拿到q个锁谁可以运行它所控制的那D代码。当有一个明的对象作ؓ(f)锁时Q就可以q样写程序,但当没有明确的对象作为锁Q只是想让一D代码同步时Q可以创Z个特D的instance变量Q它得是一个对象)来充当锁Q?br /> class Foo implements Runnable {<br /> private byte[] lock = new byte[0]; // Ҏ(gu)的instance变量<br /> Public void methodA() {<br />      synchronized(lock) { //… }<br />   }<br />   //…..<br /> }<br /> 注:(x)雉度的byte数组对象创徏h比M对象都经――查看编译后的字节码Q生成零长度的byte[]对象只需3条操作码Q而Object lock = new Object()则需?行操作码?br /> 3Q将synchronized作用于static 函数Q示例代码如下:(x)<br /> Class Foo {<br />    public synchronized static void methodAAA() { // 同步的static 函数<br />    //….<br />    }<br />    public void methodBBB() {<br />      synchronized(Foo.class) // class literal(cdU字面常?<br />     }<br /> }<br /> 代码中的methodBBB()Ҏ(gu)是把class literal作ؓ(f)锁的情况Q它和同步的static函数产生的效果是一L(fng)Q取得的锁很特别Q是当前调用q个Ҏ(gu)的对象所属的c(ClassQ而不再是p个Class产生的某个具体对象了Q?br /> 记得在《Effective Java》一书中看到q将 Foo.class?P1.getClass()用于作同步锁q不一P不能用P1.getClass()来达到锁q个Class的目的。P1指的是由FoocM生的对象?br /> 可以推断Q如果一个类中定义了一个synchronized的static函数AQ也定义了一个synchronized 的instance函数BQ那么这个类的同一对象Obj在多U程中分别访问A和B两个Ҏ(gu)Ӟ不会(x)构成同步Q因为它们的锁都不一栗AҎ(gu)的锁是Objq个对象Q而B的锁是Obj所属的那个Class?br /> 结如下Q?br /> 搞清楚synchronized锁定的是哪个对象Q就能帮助我们设计更安全的多U程E序?br /> q有一些技巧可以让我们对共享资源的同步讉K更加安全Q?br /> 1Q?定义private 的instance变量+它的 getҎ(gu)Q而不要定义public/protected的instance变量。如果将变量定义为publicQ对象在外界可以l过同步Ҏ(gu)的控制而直接取得它Qƈ改动它。这也是JavaBean的标准实现方式之一?br /> 2Q如果instance变量是一个对象,如数l或ArrayList什么的Q那上述Ҏ(gu)仍然不安全,因ؓ(f)当外界对象通过getҎ(gu)拿到q个instance 对象的引用后Q又其指向另一个对象,那么q个private变量也就变了Q岂不是很危险。这个时候就需要将getҎ(gu)也加上synchronized同步Qƈ且,只返回这个private对象的clone()――这P调用端得到的是对象副本的引用了?br /> <img src ="http://www.aygfsteel.com/casta/aggbug/239651.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/casta/" target="_blank">casta</a> 2008-11-10 13:54 <a href="http://www.aygfsteel.com/casta/archive/2008/11/10/239651.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java实现_的四舍五?/title><link>http://www.aygfsteel.com/casta/archive/2008/11/10/239648.html</link><dc:creator>casta</dc:creator><author>casta</author><pubDate>Mon, 10 Nov 2008 05:34:00 GMT</pubDate><guid>http://www.aygfsteel.com/casta/archive/2008/11/10/239648.html</guid><wfw:comment>http://www.aygfsteel.com/casta/comments/239648.html</wfw:comment><comments>http://www.aygfsteel.com/casta/archive/2008/11/10/239648.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/casta/comments/commentRss/239648.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/casta/services/trackbacks/239648.html</trackback:ping><description><![CDATA[<br /> <strong>BigDecimal.ROUND_HALF_DOWN</strong> 如果最后一?lt;=5则舍弃,如果>5Q?向前q一位。如7.5->7;7.6->8;-7.5->-7<br /> <br /> <strong>BigDecimal.ROUND_HALF_UP</strong> 如果最后一?lt;5则舍弃,如果>=5Q?向前q一位。反之舍弃。如7.5->8;7.4->7;-7.5->-8<br /> <br /> <strong>BigDecimal.ROUND_UP</strong>       最后一位如果大?Q则向前q一位,正负数都如此?br /> <br /> <strong>BigDecimal.ROUND_DOWN</strong> 最后一位不是什么都?x)被舍弃?br /> <br /> <strong>BigDecimal.ROUND_CEILING</strong> 如果是正敎ͼ按ROUND_UP处理Q如果是负数Q按照ROUND_DOWN处理。例?.1->8; -7.1->-7;所以这U近似的l果都会(x)>=实际倹{?br /> <br /> <strong>BigDecimal.ROUND_FLOOR</strong> 跟BigDecimal_ROUND_CEILING相反。例?.1->7;-7.1->-8。这U处理的l果<=实际倹{?br /> <br /> <strong>BigDecimal.ROUND_HALF_EVEN</strong> 如果倒数W二位是奇数Q按照BigDecimal.ROUND_HALF_UP处理Q如果是偶数Q按?BigDecimal.ROUND_HALF_DOWN来处理。如7.5->8;8.5->8;7.4->7;-7.5->-8 <br /> <br /> <br /> <img src ="http://www.aygfsteel.com/casta/aggbug/239648.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/casta/" target="_blank">casta</a> 2008-11-10 13:34 <a href="http://www.aygfsteel.com/casta/archive/2008/11/10/239648.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>文g下蝲Q文件名q的问题解?/title><link>http://www.aygfsteel.com/casta/archive/2008/07/18/215822.html</link><dc:creator>casta</dc:creator><author>casta</author><pubDate>Fri, 18 Jul 2008 07:33:00 GMT</pubDate><guid>http://www.aygfsteel.com/casta/archive/2008/07/18/215822.html</guid><wfw:comment>http://www.aygfsteel.com/casta/comments/215822.html</wfw:comment><comments>http://www.aygfsteel.com/casta/archive/2008/07/18/215822.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/casta/comments/commentRss/215822.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/casta/services/trackbacks/215822.html</trackback:ping><description><![CDATA[    只有注册用户d后才能阅读该文?a href='http://www.aygfsteel.com/casta/archive/2008/07/18/215822.html'>阅读全文</a><img src ="http://www.aygfsteel.com/casta/aggbug/215822.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/casta/" target="_blank">casta</a> 2008-07-18 15:33 <a href="http://www.aygfsteel.com/casta/archive/2008/07/18/215822.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>正则表达?/title><link>http://www.aygfsteel.com/casta/archive/2008/07/18/215696.html</link><dc:creator>casta</dc:creator><author>casta</author><pubDate>Fri, 18 Jul 2008 02:59:00 GMT</pubDate><guid>http://www.aygfsteel.com/casta/archive/2008/07/18/215696.html</guid><description><![CDATA[    只有注册用户d后才能阅读该文?a href='http://www.aygfsteel.com/casta/archive/2008/07/18/215696.html'>阅读全文</a><img src ="http://www.aygfsteel.com/casta/aggbug/215696.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/casta/" target="_blank">casta</a> 2008-07-18 10:59 <a href="http://www.aygfsteel.com/casta/archive/2008/07/18/215696.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank">΢ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Է</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">֣</a>| <a href="http://" target="_blank">̨ʡ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">˳</a>| <a href="http://" target="_blank">ƺ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ׯ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">˳</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ҧ</a>| <a href="http://" target="_blank">ϽϽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɳ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank">Ϸ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">̫</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƶ</a>| <a href="http://" target="_blank">ٽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">˳</a>| <a href="http://" target="_blank">ϳ</a>| <a href="http://" target="_blank">ɳ</a>| <a href="http://" target="_blank">˼</a>| <a href="http://" target="_blank">â</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ϸ</a>| <a href="http://" target="_blank"></a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>