??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 GMT60- Java同步机制谈――synchronized对代码媄?/title>http://www.aygfsteel.com/casta/archive/2008/11/10/239651.htmlcastacastaMon, 10 Nov 2008 05:54:00 GMThttp://www.aygfsteel.com/casta/archive/2008/11/10/239651.htmlhttp://www.aygfsteel.com/casta/comments/239651.htmlhttp://www.aygfsteel.com/casta/archive/2008/11/10/239651.html#Feedback0http://www.aygfsteel.com/casta/comments/commentRss/239651.htmlhttp://www.aygfsteel.com/casta/services/trackbacks/239651.html
ȝ说来Qsynchronized关键字可以作为函数的修饰W,也可作ؓ(f)函数内的语句Q也是qx说的同步Ҏ(gu)和同步语句块。如果再l的分类Q?synchronized可作用于instance变量、object referenceQ对象引用)、static函数和class literals(cdU字面常?w上?br />
在进一步阐qC前,我们需要明几点:(x)
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)
Public synchronized void methodAAA() {
//….
}
q也是同步Ҏ(gu)Q那q时synchronized锁定的是哪个对象呢?它锁定的是调用这个同步方法对象。也是_(d)当一个对象P1在不同的U程中执行这个同步方法时Q它们之间会(x)形成互斥Q达到同步的效果。但是这个对象所属的Class所产生的另一对象P2却可以Q意调用这个被加了 synchronized关键字的Ҏ(gu)?br />
上边的示例代码等同于如下代码Q?br />
public void methodAAA() {
synchronized (this) // (1)
{
//…..
}
}
(1)处的this指的是什么呢Q它指的是调用q个Ҏ(gu)的对象,如P1。可见同步方法实质是synchronized作用于object reference。――那个拿CP1对象锁的U程Q才可以调用P1的同步方法,而对P2而言QP1q个锁与它毫不相qԌE序也可能在q种情Ş下摆脱同步机制的控制Q造成数据混ؕQ(
2Q同步块Q示例代码如下:(x)
public void method3(SomeObject so) {
synchronized(so) {
//…..
}
}
q时Q锁是soq个对象Q谁拿到q个锁谁可以运行它所控制的那D代码。当有一个明的对象作ؓ(f)锁时Q就可以q样写程序,但当没有明确的对象作为锁Q只是想让一D代码同步时Q可以创Z个特D的instance变量Q它得是一个对象)来充当锁Q?br />
class Foo implements Runnable {
private byte[] lock = new byte[0]; // Ҏ(gu)的instance变量
Public void methodA() {
synchronized(lock) { //… }
}
//…..
}
注:(x)雉度的byte数组对象创徏h比M对象都经――查看编译后的字节码Q生成零长度的byte[]对象只需3条操作码Q而Object lock = new Object()则需?行操作码?br />
3Q将synchronized作用于static 函数Q示例代码如下:(x)
Class Foo {
public synchronized static void methodAAA() { // 同步的static 函数
//….
}
public void methodBBB() {
synchronized(Foo.class) // class literal(cdU字面常?
}
}
代码中的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 />

]]> - java实现_的四舍五?/title>http://www.aygfsteel.com/casta/archive/2008/11/10/239648.htmlcastacastaMon, 10 Nov 2008 05:34:00 GMThttp://www.aygfsteel.com/casta/archive/2008/11/10/239648.htmlhttp://www.aygfsteel.com/casta/comments/239648.htmlhttp://www.aygfsteel.com/casta/archive/2008/11/10/239648.html#Feedback0http://www.aygfsteel.com/casta/comments/commentRss/239648.htmlhttp://www.aygfsteel.com/casta/services/trackbacks/239648.html
BigDecimal.ROUND_HALF_DOWN 如果最后一?lt;=5则舍弃,如果>5Q?向前q一位。如7.5->7;7.6->8;-7.5->-7
BigDecimal.ROUND_HALF_UP 如果最后一?lt;5则舍弃,如果>=5Q?向前q一位。反之舍弃。如7.5->8;7.4->7;-7.5->-8
BigDecimal.ROUND_UP 最后一位如果大?Q则向前q一位,正负数都如此?br />
BigDecimal.ROUND_DOWN 最后一位不是什么都?x)被舍弃?br />
BigDecimal.ROUND_CEILING 如果是正敎ͼ按ROUND_UP处理Q如果是负数Q按照ROUND_DOWN处理。例?.1->8; -7.1->-7;所以这U近似的l果都会(x)>=实际倹{?br />
BigDecimal.ROUND_FLOOR 跟BigDecimal_ROUND_CEILING相反。例?.1->7;-7.1->-8。这U处理的l果<=实际倹{?br />
BigDecimal.ROUND_HALF_EVEN 如果倒数W二位是奇数Q按照BigDecimal.ROUND_HALF_UP处理Q如果是偶数Q按?BigDecimal.ROUND_HALF_DOWN来处理。如7.5->8;8.5->8;7.4->7;-7.5->-8

]]> - 文g下蝲Q文件名q的问题解?/title>http://www.aygfsteel.com/casta/archive/2008/07/18/215822.htmlcastacastaFri, 18 Jul 2008 07:33:00 GMThttp://www.aygfsteel.com/casta/archive/2008/07/18/215822.htmlhttp://www.aygfsteel.com/casta/comments/215822.htmlhttp://www.aygfsteel.com/casta/archive/2008/07/18/215822.html#Feedback0http://www.aygfsteel.com/casta/comments/commentRss/215822.htmlhttp://www.aygfsteel.com/casta/services/trackbacks/215822.html阅读全文

]]> - 正则表达?/title>http://www.aygfsteel.com/casta/archive/2008/07/18/215696.htmlcastacastaFri, 18 Jul 2008 02:59:00 GMThttp://www.aygfsteel.com/casta/archive/2008/07/18/215696.html阅读全文

]]>
վ֩ģ壺
ɽ|
|
Է|
|
֣|
̨ʡ|
|
|
˳|
ƺ|
|
ׯ|
|
˳|
|
Ҧ|
ϽϽ|
|
ɳ|
|
|
|
ɽ|
Ϸ|
|
|
̫|
|
|
ƶ|
ٽ|
|
|
˳|
ϳ|
ɳ|
˼|
â|
|
Ϸ|
|