2009-06-23

Synchronized在java的用法

2009-05-12 13:41
Java 对多线程的支持与同步机制深受大家的喜爱,似乎看起来使用了synchronized关键字就可以轻松地解决多线程共享数据同步问题。

到底如何?――还得对synchronized关键字的作用进行深入了解才可定论。 总的说来,synchronized关键字可以作为函数的修饰符,也可作为函数内的语句,也就是平时说的同步方法和同步语句块。

如果再细的分类,synchronized可作用于
  • instance变量、
  • object reference(对象引用)、
  • static函数 和
  • class literals(类名称字面常量)身上。
在进一步阐述之前,我们需要明确几点:
  1. 无论synchronized关键字加在方法上还是对象上,它取得的锁都是对象,而不是把一段代码或函数当作锁――而且同步方法很可能还会被其他线程的对象访问。
  2. 每个对象只有一个锁(lock)与之相关联。
  3. 实现同步是要很大的系统开销作为代价的,甚至可能造成死锁,所以尽量避免无谓的同步控制。 接着来讨论synchronized用到不同地方对代码产生的影响: 假设P1、P2是同一个类的不同对象,这个类中定义了以下几种情况的同步块或同步方法,P1、P2就都可以调用它们。
  • 把synchronized当作函数修饰符时,示例代码如下: Public synchronized void methodAAA() { //…. } 这也就是同步方法,那这时synchronized锁定的是哪个对象呢?它锁定的是调用这个同步方法对象。也就是说,当一个对象P1在不同的线程中执行这个同步方法时,它们之间会形成互斥,达到同步的效果。但是这个对象所属的Class所产生的另一对象P2却可以任意调用这个被加了synchronized关键字的方法。 上边的示例代码等同于如下代码: public void methodAAA() { synchronized (this) // (1) { //….. } } (1)处的this指的是什么呢?它指的就是调用这个方法的对象,如P1。可见同步方法实质是将synchronized作用于object reference。――那个拿到了P1对象锁的线程,才可以调用P1的同步方法,而对P2而言,P1这个锁与它毫不相干,程序也可能在这种情形下摆脱同步机制的控制,造成数据混乱:(
  • 同步块,示例代码如下: public void method3(SomeObject so) { synchronized(so) { //….. } } 这时,锁就是so这个对象,谁拿到这个锁谁就可以运行它所控制的那段代码。当有一个明确的对象作为锁时,就可以这样写程序,但当没有明确的对象作为锁,只是想让一段代码同步时,可以创建一个特殊的instance变量(它得是一个对象)来充当锁: class Foo implements Runnable { private byte[] lock = new byte[0]; // 特殊的instance变量 Public void methodA() { synchronized(lock) { //… } } //….. } 注:零长度的byte数组对象创建起来将比任何对象都经济――查看编译后的字节码:生成零长度的byte[]对象只需3条操作码,而Object lock = new Object()则需要7行操作码。 3.将synchronized作用于static 函数,示例代码如下: Class Foo { public synchronized static void methodAAA() // 同步的static 函数 { //…. } public void methodBBB() { synchronized(Foo.class) // class literal(类名称字面常量) } } 代码中的methodBBB()方法是把class literal作为锁的情况,它和同步的static函数产生的效果是一样的,取得的锁很特别,是当前调用这个方法的对象所属的类(Class,而不再是由这个Class产生的某个具体对象了)。 记得在《Effective Java》一书中看到过将 Foo.class和 P1.getClass()用于作同步锁还不一样,不能用P1.getClass()来达到锁这个Class的目的。P1指的是由Foo类产生的对象。 可以推断:如果一个类中定义了一个synchronized的static函数A,也定义了一个synchronized 的instance函数B,那么这个类的同一对象Obj在多线程中分别访问A和B两个方法时,不会构成同步,因为它们的锁都不一样。A方法的锁是Obj这个对象,而B的锁是Obj所属的那个Class。 小结如下: 搞清楚synchronized锁定的是哪个对象,就能帮助我们设计更安全的多线程程序。

还有一些技巧可以让我们对共享资源的同步访问更加安全:
  1. 定义private 的instance变量+它的 get方法,而不要定义public/protected的instance变量。如果将变量定义为public,对象在外界可以绕过同步方法的控制而直接取得它,并改动它。这也是JavaBean的标准实现方式之一。
  2. 如果instance变量是一个对象,如数组或ArrayList什么的,那上述方法仍然不安全,因为当外界对象通过get方法拿到这个instance对象的引用后,又将其指向另一个对象,那么这个private变量也就变了,岂不是很危险。 这个时候就需要将get方法也加上synchronized同步,并且,只返回这个private对象的clone()――这样,调用端得到的就是对象副本的引用了。

2009-06-19

P1 service after sales...

SMS received from 62003 on 2009 June 18, Thursday 10:59pm:

P1 is experiencing temporary service interruption that affects some of our subscribers. Affected users may experience limited to no service during this period. Our tech team is working to restore service to its full capacity. We will provide further updates as and when available. Thanks.

but the line was facing problem to get the connection since evening right 5/7 hours before i receive this sms... is this better than some service provider?

which only to tell u when u call to their answering machine...

彩色兵马俑

Pictures source from: http://jianghua9161.blog.sohu.com/114969895.html





:
转图(快载):http://2su.de/Er (picasaweb.google.com)
原图(慢载):http://2su.de/VfM (Chinese Version)

兵马俑中英文介绍 (Chinese / English version)

24年等待彩色兵马俑方阵出土 (Chinese Version)

秦始皇兵马俑时隔24年今日第三次发掘(图) (Chinese Version)

江蘇出土彩色漢兵馬俑 (Chinese Version)

出土彩色木俑比兵马俑早500年 (Chinese Version)

2009-05-15

Struts - multiple message-resources

source from: http://viralpatel.net/blogs/2008/11/multiple-message-resource-property-file-in-struts.html

Multiple message resource property file in Struts



Make an entry of message resource file name in struts-config.xml file.





Once this is done, the message resource file can be accessed by using the key (in this case we have myResource & myOtherResource). The key should be used in tag in jsp to display perticular message from the resource property file. bundle=”" attribute of is used to identify the perticular property file.


key="somekey.in.myresource" />
key="somekey.in.myotherresource"/>

2009-05-05

TTplayer 5.5 beta, i love it

what i love TTplayer 5.5 beta:
  • application in utf-8 encoding.
  • 重命名文件 (个别、批件式) (single or batch file rename)
  • 2b continue...

2009-05-04

Web Application - MVC Layers

source found: http://www.javapassion.com/strutscodecamp/

Three Logical Layers in a Web Application: Model, View, Control
? Model (Business process layer)
– Models the data and behavior behind the business process
– Responsible for actually doing
? Performing DB queries
? Calculating the business process
? Processing orders
– Encapsulate of data and behavior which are independent of presentation
? View (Presentation layer)
– Display information according to client types
– Display result of business logic (Model)
– Not concerned with how the information was obtained, or from where (since that is the responsibility of Model)
? Controller (Control layer)
– Serves as the logical connection between the user's interaction and the business services on the back
– Responsible for making decisions among multiple presentations
? e.g. User's language, locale or access level dictates a different presentation.
– A request enters the application through the control layer, it will decide how the request should be handled and what information should be returned

Web Applications
  • It is often advantageous to treat each layer as an independent portion of your application
  • Do not confuse logical separation of responsibilities with actual separation of components
  • Some or of the layers can be combined into single components to reduce application complexity

what's the different of these???

  • logical separation of responsibilities
  • actual separation of components

2009-04-22

GPS Mt KK path tracking

Found this: 神山(Mt. Kinabalu, Timpohon Gate - Laban Rata)
http://maps.google.com/maps/ms?msa=0&msid=116154094173339195464.0004652566f7f86852958&ct=onebox&cd=2&cad=onebox,cid:16864761765956365071


maps.google.com searched by:
  1. Laban Rata
  2. "Mt. Kinabalu, Timpohon Gate - Laban Rata)"















found this: 沙巴的神山Mt Kinabalu攻略| 海外游
googled by: "神山(Mt. Kinabalu, Timpohon Gate - Laban Rata)"



source pic from: http://www.haiwaiyou.com/haiwaiyoublog/?p=1087

more detail have to visit: http://www.haiwaiyou.com/haiwaiyoublog/?p=1087

2009-04-20

一个玩笑

当你有个孩子
你不好好教他
你就害你全家
当你有个女儿
你不好好教她
你就害别人全家
所以你跟谁有仇
很简单嘛。。。
你就宠坏你的女儿
嫁给他儿子
他全家都完了
大仇就报了。













极端的人,可以把以上的话题放大,把一个玩笑变成严肃的言论。。。
相反的人,可以领悟到话里的话,从中理解不同的内容。。。

2009-04-05

i'm using eclipse wtp

Build Type:Integration
Build Name:3.1
Stream:R3.1
Build Date:Thu, 2 Apr 2009 -- 04:46 (UTC)


  1. download parts...

    • No.ComponentsFile Name
      1.Eclipse Platform (Platform, JDT)eclipse-SDK-3.5M6-win32.zip
      2Web App Developerswtp-I-3.1-20090402044606.zip
      3EMF v2.5 Runtime Minimum executable codeemf-runtime-2.5.0M6.zip
      4EMF XSD v2.5 Runtime Minimum executable codexsd-runtime-2.5.0M6.zip
      5Graphical Editing Framework (GEF)GEF-SDK-3.5.0M6.zip
      6Data Tools Platform (DTP) (required only for EJB or JPT development)dtp-sdk-1.7.0M6-200903160500.zip

  2. unzip
    1. Eclipse Platform (Platform, JDT)
    2. Web App Developers
    3. EMF v2.5 Runtime Minimum executable code
    4. EMF XSD v2.5 Runtime Minimum executable code
    5. Graphical Editing Framework (GEF)
    6. Data Tools Platform (DTP) (required only for EJB or JPT development)

2009-04-03

得找工作的 thursday...

oh sh*t...
真的应征了居安思危这句话。。。
不思的话,若出了事情结果只有慌乱。。。

毫无准备的我,只有拿着“经验”向新的战场,向前冲了。。。
希望,结果是有惊无险地让我找到不错的战国投靠咯。。。

妈妈说,机会是给有准备的人。。。
希望我这临时抱佛脚的准备,可以再靠运气遇到临时/迟到出门的机会咯~
呵呵

cheerz...

2009-03-26

Nokia - 隐形的备用电池

source: http://nokia.zol.com.cn

极少有人知道的手机隐藏功能

极少有人知道的手机隐藏功能

隐形的备用电池

  你的手机电量不足了,为了让它能够继续使用,按*3370#键,手机会重新启动,启动完毕后,你就会发现电量增加了50%。这部分隐藏的备用电量用完了你就必须得充电了,再次充电的时候,隐形的备用电池也同时充电,下次电量低的时候又可以用这个方法。知道这个在紧急情况下如果手机电量不足非常管用。

2009-02-19

myName

Windows Live SpacemyName(agian).

周: [ zhōu ]
[ 国标码:D6DC 部首: 笔画:8 笔顺:35121251 ]  

1. lap
2. week
3. thoughtful
4. (surname)
5. complete
6. encircle
7. circuit
8. cycle
9. all
10. every
11. attentive

其它相关解释:
<Chou> <main pipe> <perimeter> <Zhou> 


秉: [ bǐng ] / [ bǐng ]
[ 国标码:B1FC 部首: 笔画:8 笔顺:31511234 ]  

1. maintain
2. (surname)
3. to grasp
4. hold


晟: [ shèng ]
[ 国标码:EAC9 部首: 笔画:10 笔顺:2511135534 ]  

1. splendor
2. brightness of sun