??xml version="1.0" encoding="utf-8" standalone="yes"?>色播色播色播色播色播在线,电影一区二区三区久久免费观看 ,亚洲视频一二区http://www.aygfsteel.com/yangyi/category/28784.html自强不息zh-cnFri, 09 Jul 2010 23:13:50 GMTFri, 09 Jul 2010 23:13:50 GMT60谈Java中的同步的方法和原理http://www.aygfsteel.com/yangyi/archive/2010/07/09/325679.html杨一杨一Fri, 09 Jul 2010 11:49:00 GMThttp://www.aygfsteel.com/yangyi/archive/2010/07/09/325679.htmlhttp://www.aygfsteel.com/yangyi/comments/325679.htmlhttp://www.aygfsteel.com/yangyi/archive/2010/07/09/325679.html#Feedback0http://www.aygfsteel.com/yangyi/comments/commentRss/325679.htmlhttp://www.aygfsteel.com/yangyi/services/trackbacks/325679.htmlJava的内存模型中Thread会附有自q堆栈Q寄存器Q必要时需要和d即heap之间同步?br /> 可以使用Synchornized关键字和Concurrent包中的Lock可以保证U程互斥和可见性?/font>

互斥性体现在c锁或者对象锁上,每个对象自n都包含一个监视器Q该监视器是一个每ơ只能被一个线E所获取q入的(f)界区Q可以通过wait和notify来退出和准入临界区。可?/font>看出q是一个生产?消费者的模型。而Concurrent包中的LockZ能够获得更好的性能和更好的扩展性,以及不依赖于关键字的可读代码Q自己实Cq样一个生产消贚w列,?/font>是AbstractQueuedSynchronizerQ被UCؓAQS的机制。每个Lock都内|了一个AbstractQueuedSynchronizer。需要说明的是AbstractQueuedSynchronizer内部实现采用了CAS机制Q通过getState, setState, compareAndSetState讉K控制一?2bit int的Ş式进行互斥?/font>

那么可见性是如何保证的呢Q?/font>

对于关键字的同步机制Q其实可见性就是线E和d之间的同步时机问题。共?个时间点需要注意:
1 获取或释攄?对象锁的时候。Thread保证reload/flush全部变更
2 volatile是flush on write或者reload on read
3 当线E首ơ访问共享变量时Q可以得到最新的l果?br /> 题外Q所以在构造方法中公布this时很危险的。简单的_是构造时不逃脱M变量Q不开启新的线E,只做装。关于安全构造,请参?br /> http://www.ibm.com/developerworks/cn/java/j-jtp0618/#resources
4 U程l束Ӟ所有变更会写回d

关于Concurrent Lock如何实现可见性的问题QDoug Lea大侠Q只在他的论文中提到Q按照JSR133QUnsafe在getState, setState, compareAndSetState时保证了U程的变量的可见性,不需要额外的volatile支持Q至于具体这些native做了哪些magic׃得而知了,MQ最后的contract是保证lock区间的共享变量可见性。开发团队被逼急了p样回{:
There seems to be a real reluctance to explain the dirty details. I think the question was definitely understood on the concurrent interest thread, and the answer is that synchronized and concurrent locking are intended to be interchangable in terms of memory semantics when implemented correctly. The answer to matfud's question seems to be "trust us.”

不过q个地方的确是开发团队给我们用户qh的地方,在同样应用了CAS机制的AtomiccMQ都内嵌了volatile变量Q但是再lock块中Q他告诉我们可以保证可见性?/font>

感兴的同学可以下面的两个thread和Doug Lea的thesisQ?br /> http://altair.cs.oswego.edu/pipermail/concurrency-interest/2005-June/001587.html
http://forums.sun.com/thread.jspa?threadID=631014&start=15&tstart=0
http://gee.cs.oswego.edu/dl/papers/aqs.pdf



杨一 2010-07-09 19:49 发表评论
]]>
commons-net FTPClient API存取设计http://www.aygfsteel.com/yangyi/archive/2010/07/07/325504.html杨一杨一Wed, 07 Jul 2010 15:08:00 GMThttp://www.aygfsteel.com/yangyi/archive/2010/07/07/325504.htmlhttp://www.aygfsteel.com/yangyi/comments/325504.htmlhttp://www.aygfsteel.com/yangyi/archive/2010/07/07/325504.html#Feedback1http://www.aygfsteel.com/yangyi/comments/commentRss/325504.htmlhttp://www.aygfsteel.com/yangyi/services/trackbacks/325504.html

文gpȝ无非是文g的存取和l织l构?br /> 讉K一个文件系l的API也应该是写,读,定位Ҏ(gu)QPathname?/URI?Q?/p>

FTPClient针对文g的保存和获取各提供了两个Ҏ(gu)Q分别是Q?br />

public boolean storeFile(String remote, InputStream local)
public OutputStream storeFileStream(String remote)

public boolean retrieveFile(String remote, OutputStream local)
public InputStream retrieveFileStream(String remote)

 

两个Ҏ(gu)貌似相同Q实际不同,q回的那个因ؓ不能马上处理,所以需要用h工调用completePendingCommandQ而另一个传递流q去的则不需要。可能有同学已经遇到q这个问题了Q读写第一个文件时L正确的,当相同APIdW二个文件时Qblock住了。这是因为FTPClient要求在进行流操作之后执行completePendingCommandQ以保处理完毕,因ؓ处理不是即时的Q所以也没有办法不手工调用completePendingCommand。问题是开发者把不返回流的方法末֊上了completePendingCommandQ如果不看代码可能根本不知道?br /> 文档上说Q?br />

     * There are a few FTPClient methods that do not complete the
     
* entire sequence of FTP commands to complete a transaction.  These
     
* commands require some action by the programmer after the reception
     
* of a positive intermediate command.  After the programmer's code
     * completes its actions, it must call this method to receive
     
* the completion reply from the server and verify the success of the
     
* entire transaction.


但是q样仍然q是让h有点困惑Qؓ什么都是存?d的方法,有时候要调用completePendingCommandQ有时候不调用Q更严重的问题是completePendingCommand调用了getReplyQ如果一个命令通过socket stream传了q去但是没有getReplyQ即没有completePendingCommandQ那么下ơ发命oӞ会受到本次q回码的q扰Q得到无效的响应。而如果在completePendingCommand之后又进行了一ơ无辜的completePendingCommandQ那么因为FTP Server上没有Reply了,׃block。所以completePendingCommandq不是可以随意添加的?/p>

现在出现了两个问题:
1 completePendingCommand很容易多出来或遗?br /> 2 昑ּ调用completePendingCommand暴露了底层实玎ͼl用户带来不便,用户只想要InputStream或者OutputStream

Z解决q个问题Q可以对InputStreamq行扩展Q徏立一个ReplyOnCloseInputStreamQ如下:

private static ReplyOnCloseInputStream extends InputStream{
  
//
  public ReplyOnCloseInputStream(InputStream is, FTPClient c){
    
//
  }

  
//
  @override
  
public void close(){
    
if(c.completePendingCommand){
      is.close();
    }
else{
      
//throw Exception
    }

  }

}
 
//
return new ReplyOnCloseInputStream(is, client);


q样装之后QFTPClient的用户只需要正常在处理完流之后关闭卛_Q而不必暴露实现细节。保存文件也可以用相同的Ҏ(gu)装OutputStream?/p>

杨一 2010-07-07 23:08 发表评论
]]>
关于ThreadLocal的内存泄?/title><link>http://www.aygfsteel.com/yangyi/archive/2010/07/02/325100.html</link><dc:creator>杨一</dc:creator><author>杨一</author><pubDate>Fri, 02 Jul 2010 10:27:00 GMT</pubDate><guid>http://www.aygfsteel.com/yangyi/archive/2010/07/02/325100.html</guid><wfw:comment>http://www.aygfsteel.com/yangyi/comments/325100.html</wfw:comment><comments>http://www.aygfsteel.com/yangyi/archive/2010/07/02/325100.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.aygfsteel.com/yangyi/comments/commentRss/325100.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/yangyi/services/trackbacks/325100.html</trackback:ping><description><![CDATA[ThreadLocal是一UconfinementQconfinement和local及immutable都是U程安全的(如果JVM可信的话Q。因为对每个U程和value之间存在hash表,而线E数量未知,从表象来看ThreadLocal会存在内存泄ԌM代码Q发现实际上也可能会内存泄露?br /> <br /> 事实上每个Thread实例都具备一个ThreadLocal的mapQ以ThreadLocal Instance为keyQ以l定的Object为Value。而这个map不是普通的mapQ它是在ThreadLocal中定义的Q它和普通map的最大区别就是它的Entry是针对ThreadLocal弱引用的Q即当外部ThreadLocal引用为空Ӟmap可以把ThreadLocal交给GC回收Q从而得C个null的key?br /> <br /> q个threadlocal内部的map在Thread实例内部l护了ThreadLocal Instance和bind value之间的关p,q个map有thresholdQ当过thresholdӞmap会首先检查内部的ThreadLocalQ前文说q,map是弱引用可以释放Q是否ؓnullQ如果存在nullQ那么释攑ּ用给gcQ这样保留了位置l新的线E。如果不存在slate threadlocalQ那么double threshold。除此之外,q有两个Z释放掉已l废弃的threadlocal占用的内存,一是当hash法得到的table index刚好是一个null key的threadlocalӞ直接用新的threadlocal替换掉已l废弃的。另外每ơ在map中新Z个entryӞx有和用过的或未清理的entry命中ӞQ会调用cleanSomeSlots来遍历清理空间。此外,当Thread本n销毁时Q这个map也一定被销毁了Qmap在Thread之内Q,q样内部所有绑定到该线E的ThreadLocal的Object Value因ؓ没有引用l箋保持Q所以被销毁?br /> <br /> 从上可以看出Java已经充分考虑了时间和I间的权衡,但是因ؓ|ؓnull的threadlocal对应的Object Value无法及时回收。map只有到达threshold时或dentry时才做检查,不似gc是定时检查,不过我们可以手工轮询查,昑ּ调用map的removeҎ(gu)Q及时的清理废弃的threadlocal内存。需要说明的是,只要不往不用的threadlocal中放入大量数据,问题不大Q毕竟还有回收的机制?br /> <br /> lgQ废弃threadlocal占用的内存会?中情况下清理Q?br /> 1 threadl束Q那么与之相关的threadlocal value会被清理<br /> 2 GC后,thread.threadlocals(map) threshold过最大值时Q会清理<br /> 3 GC后,thread.threadlocals(map) d新的EntryӞhash法没有命中既有EntryӞ会清?br /> <br /> 那么何时?#8220;内存泄露”?当Thread长时间不l束Q存在大量废弃的ThreadLocalQ而又不再d新的ThreadLocalQ或新添加的ThreadLocal恰好和一个废弃ThreadLocal在map中命中)时? <img src ="http://www.aygfsteel.com/yangyi/aggbug/325100.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/yangyi/" target="_blank">杨一</a> 2010-07-02 18:27 <a href="http://www.aygfsteel.com/yangyi/archive/2010/07/02/325100.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>NIO学习之Web服务器示?/title><link>http://www.aygfsteel.com/yangyi/archive/2010/06/25/324501.html</link><dc:creator>杨一</dc:creator><author>杨一</author><pubDate>Fri, 25 Jun 2010 11:19:00 GMT</pubDate><guid>http://www.aygfsteel.com/yangyi/archive/2010/06/25/324501.html</guid><wfw:comment>http://www.aygfsteel.com/yangyi/comments/324501.html</wfw:comment><comments>http://www.aygfsteel.com/yangyi/archive/2010/06/25/324501.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/yangyi/comments/commentRss/324501.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/yangyi/services/trackbacks/324501.html</trackback:ping><description><![CDATA[     摘要: 1 Ҏ(gu)cpu core数量定selector数量 2 用一个selector服务acceptQ其他selector按照core-1分配U程数运? 3 accept selector作ؓ生者把获得的请求放入队? 4 某个selector作ؓ消费者从blocking queue中取求socket channelQƈ向自己注? 5 当获得read信号Ӟselector建立工作...  <a href='http://www.aygfsteel.com/yangyi/archive/2010/06/25/324501.html'>阅读全文</a><img src ="http://www.aygfsteel.com/yangyi/aggbug/324501.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/yangyi/" target="_blank">杨一</a> 2010-06-25 19:19 <a href="http://www.aygfsteel.com/yangyi/archive/2010/06/25/324501.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>谈Java中的通信机制及与C/C++ API的集成(下)http://www.aygfsteel.com/yangyi/archive/2007/12/06/165761.html杨一杨一Thu, 06 Dec 2007 04:19:00 GMThttp://www.aygfsteel.com/yangyi/archive/2007/12/06/165761.htmlhttp://www.aygfsteel.com/yangyi/comments/165761.htmlhttp://www.aygfsteel.com/yangyi/archive/2007/12/06/165761.html#Feedback2http://www.aygfsteel.com/yangyi/comments/commentRss/165761.htmlhttp://www.aygfsteel.com/yangyi/services/trackbacks/165761.html 上文提到Q利用gSOAP可以做到以下3点:
1 一个Stand-alone的服务器外壳
2 一个根据APIE序自动生成的Web Services服务
3 一个WSDL描述W文?br />
客户Ҏ(gu) WSDL 描述文档Q会生成一?SOAP h消息。Web Services 都是攑֜Web服务器后面,客户生成的SOAPh会被嵌入在一个HTTP POSTh中,发送到 Web 服务器来。Web 服务器再把这些请求{发给 Web Services h处理器。请求处理器的作用在于,解析收到?SOAP hQ调?Web ServicesQ然后再生成相应?SOAP 应答。Web 服务器得?SOAP 应答后,会再通过 HTTP应答的方式把信息送回到客L?br /> WSDL是Web服务中客L和服务端沟通的桥梁Q描qC对象提供的方法。SOAP帮我们制定了一份被官方认可的对象的装Ҏ(gu)。有了WSDLQ客L只关心如何把参数用Soap装h发出去,q获取结果。服务端只关心如何对Soapq行拆包->服务->包。gSOAP可以帮我们实Cq过E中的拆包和包Q而我们可以只兛_服务的实现?br />
a归正传,在这里我们以一个简单的实现加、减、开攄Web Services的服务ؓ例子Q介lgSOAP的用:
Z发布q个Web服务Q首先我们需要把服务的接口定义好Q这个服务可能是一个现有服务的AdapterQؓ此我们定义头文g
calc.h:
typedef double xsd__double;
int ns__add(xsd__double a, xsd__double b, xsd__double &result);
int ns__sub(xsd__double a, xsd__double b, xsd__double &result);
int ns__sqrt(xsd__double a, xsd__double &result); 
注意到这里面我们把double定义成了xsd__doubleQ两个下划线Q,q是Z告诉gSOAPQ我们需要的soap格式和WSDL格式是基于Document/literal的而非rpc/encoded.Z不把事情搞复杂,在这里我只能_Java1.6自带的Web Services工具只支持Document/literal格式的WSDLQ所以我们生成这U格式的WSDL。至于这两种格式之间选择和他们的long storyQ大家可以参考下面的文章Q?br /> http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/
~写好头文g后,我们可以利用gSOAP提供的工兯行生成了Q?br /> /usr/lib/gsoap-2.7/bin/soapcpp2 -S -2 calc.h
生成的主要文件详见附件?br /> 下面我们实现calc.h中定义的函数Q?br />
// Contents of file "calc.cpp": 
#include "soapH.h" 
#include 
"ns.nsmap" 
#include 
<math.h> 
int main()
{
   struct soap soap;
   
int m, s; // master and slave sockets
   soap_init(&soap);
   m 
= soap_bind(&soap, "localhost"9999100);
   
if (m < 0)
      soap_print_fault(
&soap, stderr);
   
else
   {
      fprintf(stderr, 
"Socket connection successful: master socket = %d\n", m);
      
for (int i = 1; ; i++)
      {
         s 
= soap_accept(&soap);
         
if (s < 0)
         {
            soap_print_fault(
&soap, stderr);
            
break;
         }
         fprintf(stderr, 
"%d: accepted connection from IP=%d.%d.%d.%d socket=%d", i,
            (soap.ip 
>> 24)&0xFF, (soap.ip >> 16)&0xFF, (soap.ip >> 8)&0xFF, soap.ip&0xFF, s);
         
if (soap_serve(&soap) != SOAP_OK) // process RPC request
            soap_print_fault(&soap, stderr); // print error
         fprintf(stderr, "request served\n");
         soap_destroy(
&soap); // clean up class instances
         soap_end(&soap); // clean up everything and close socket
      }
   }
   soap_done(
&soap); // close master socket and detach environment
}
// Implementation of the "add" remote method: 
int ns__add(struct soap *soap, double a, double b, double &result) 

   result 
= a + b; 
   
return SOAP_OK; 

// Implementation of the "sub" remote method: 
int ns__sub(struct soap *soap, double a, double b, double &result) 

   result 
= a - b; 
   
return SOAP_OK; 

// Implementation of the "sqrt" remote method: 
int ns__sqrt(struct soap *soap, double a, double &result) 

   
if (a >= 0
   { 
      result 
= sqrt(a); 
      
return SOAP_OK; 
   } 
   
else
   { 
      
return soap_sender_fault(soap, "Square root of negative value""I can only compute the square root of a non-negative value");
   } 
前文提到q,我们不希望ؓ了发布基于Web Services的C语言的API而开发或应用一个大的Web服务器。我们代码中的main函数实现了一个最单的Web ServerQ基于SocketQ?q个Server利用gSOAP生成的API来提供针对SOAP的处理?br /> 下面我们把这个嵌入式的web server~译Q编译的时候注意stdsoap2.cppq个文g是从gSOAP包中拯而来Q不是自动生成的Q大家下载gSOAP后直接就能找到这个文件及其头文g?br /> g++ -o calcServer calc.cpp soapC.cpp soapServer.cpp stdsoap2.cpp
一个以Web Servers形式提供的C API诞生了?br /> 在server端执?/calcServer

下面讨论如何用Java1.6的自带工L成一个客Lstub:
把gSOAP生成的WSDL拯到我们的Java开发环境中来,按照Web Services Server中定义的端口和服务器Q配|参数生成客LWeb Services代码Q?br /> /usr/lib/jvm/jdk1.6.0_03/bin/wsimport -extension -httpproxy:localhost:9999 -verbose ns.wsdl

生成后,把这个环境添加到eclipse的编译环境中来,然后在eclipse中徏一个新的类Q?br />
class Test {
    
public static void main(String args[]) {
        Service service 
= new Service();
        
double h = service.getService().sub(200001);
        System.out.println(h);
    }
}
q行后得到结?9999.0

ȝQ当集成Java和C两种q_Ӟ我们可以有多U解x案,但首先我们应该想到gSOAP因ؓ它能够很地完成Q务?br /> 文中相关代码Q?br /> http://www.aygfsteel.com/Files/yangyi/gsoap.zip
q告Q本人明q毕业,正在扑ַ作,个h历:
http://www.aygfsteel.com/Files/yangyi/My%20Resume.zip


杨一 2007-12-06 12:19 发表评论
]]>
谈Java中的通信机制及与C/C++ API的集成(上)http://www.aygfsteel.com/yangyi/archive/2007/12/04/165241.html杨一杨一Tue, 04 Dec 2007 09:33:00 GMThttp://www.aygfsteel.com/yangyi/archive/2007/12/04/165241.htmlhttp://www.aygfsteel.com/yangyi/comments/165241.htmlhttp://www.aygfsteel.com/yangyi/archive/2007/12/04/165241.html#Feedback0http://www.aygfsteel.com/yangyi/comments/commentRss/165241.htmlhttp://www.aygfsteel.com/yangyi/services/trackbacks/165241.html 对于旧有pȝ的改造和升Q最苦恼的莫q于跨^収ͼ跨语a。我的一个朋友最q从Java专向了专?NET——因?NET的CLR既有cMJava虚拟机概念这U已l被证明很成功的底层托管能力。又对于Windows的就有桌面应用提供了良好的兼宏V?br /> 最q我的一个个人项目也面(f)着q样的需求。一个C语言开发的中间Ӟ通过API暴露l二ơ开发及插g应用。现在由于对其应用的需求变得日复杂,而且正在qUnix的管理环境,走向ZJWSq样的BCS理。有朋友推荐我用JNIQ但q样一是增加了耦合度,二是让Java睡在JNI感觉不太安稳。在认知了上下两层的pȝq_后,问题变得明朗hQ如何在HTTP协议下实现Java和C之间的交互?
思\Q?br /> 本h对Java比较熟?zhn)Q先从Java的角度入手,Java间的通信Ҏ(gu)Q?br /> 1 通过URLQApplet/JWS讉K被媄到URL的动态资源(ServletQ?br /> 2 通过URLQApplet/JWS讉K׃n的静态资源(Server定期更新静态资源)
3 通过序列化和反序列化Q实现简单对象的传输Q比如Resin的Hessian框架提供了q种通信的方式)
4 通过一些工具做代码生成Q利用Web Services实现客户端和服务端的交互
此外qHTTPQ还可以做RMIQsocket~程

现在问题是通信的一端由Java变成了C/C++, 于是Q?解决Ҏ(gu)1需要把动态资源由CGI来定义,而方?变得不再适用。于是方案有Q?br /> 1 通过URLQApplet/JWS讉K被媄到URL的动态资源(CGIQ?br /> 2 通过URLQApplet/JWS讉K׃n的静态资源(Server定期更新静态资源)
3 通过一些工具做代码生成Q利用Web Services实现客户端和服务端的交互Q?#215;××q是我们讨论的重?#215;××Q?br />
解决Ҏ(gu):
现在针对上文提出?中通信方式中的1?谈一谈实现的Ҏ(gu)Q?的实现方案比较灵z,需要发挥大家的惌力了Q)
针对CGIQ?br /> 首先CGI可以配置在各U主的服务器中作ؓ后端的脚本运行。大家可能对Servlet更熟(zhn)一些?br /> CGI可以用脚本写Q也可以用C来实现。CGI被触发后Q通过pȝ的环境变量来获得输入Q在处理完毕后向标准输出中输出结果?br /> 由此可以惌QWeb服务器在接受到来自HTTP协议的请求后Q首先把h的参数获取到Q然后设|到环境变量里?br /> Ҏ(gu)对访问的URL的解析和服务器自w的配置Q找到服务于h的CGIE序的位|,然后执行q个E序?br /> q个E序被执行后通过环境变量得到了服务器先前讄在环境变量中的参数。在l过一些复杂的逻辑操作后,向标准输出结果?br /> q个输出又被Web服务器所捕获Q{而传递回h的客L?br /> 更多关于CGI的知识和理解Q大家可以通过google来寻扄?br />
上述CGI的方式可以让我们直接获取到结果,但是Ҏ(gu)比较原始和基。其~点有:
1 需要自己制定类型传输协议,做封装和拆封Q否则只支持字符?br /> 2 我们不会Z要用C的APIq它装一个或者自己实C个Web服务器的Q这让我们的底层E序昑־蠢笨而冗余。我们希望能有一个超薄的Server外壳Q?br /> 在对API装后,通过某个端口q行开攑֍可?br />
针对Web ServciesQ?br /> Based on上面的两个不I我们只能把希望寄托在Web Servicesw上了,
W者在q里推荐l大家的是在C/C++很著名的Web Services工具gSOAP。大家可以到http://gsoap2.sourceforge.net/上去下蝲q个工具?br /> 通过q个工具Q我们可以做刎ͼ
1 一个Stand-alone的服务器外壳
2 一个根据APIE序自动生成的Web Services服务
3 一个WSDL描述W文?br />
有关ZgSOAP的Web Services C服务端和Java客户端的q行机理Q及通过Java客户端访问gSOAP的Web Services的过E中需要注意的问题Q笔者费了一天周折才搞清楚)Q将在下一中描述

q告旉Q?br /> 本h是哈工大的研I生Q明q?月毕业。正在找工作Q如果有工作ZQ别忘了通知弟哦(contactyang@163.comQ?

杨一 2007-12-04 17:33 发表评论
]]>
值得借鉴的SWT shell构造方法的~程模式http://www.aygfsteel.com/yangyi/archive/2006/09/10/68802.html杨一杨一Sun, 10 Sep 2006 06:00:00 GMThttp://www.aygfsteel.com/yangyi/archive/2006/09/10/68802.htmlhttp://www.aygfsteel.com/yangyi/comments/68802.htmlhttp://www.aygfsteel.com/yangyi/archive/2006/09/10/68802.html#Feedback0http://www.aygfsteel.com/yangyi/comments/commentRss/68802.htmlhttp://www.aygfsteel.com/yangyi/services/trackbacks/68802.html影响pQ是值得我们借鉴的编E模式,采用了如下的形式:
new MyClass(MyClass.A | MyClass.B | MyClass.C)
其中Q对于MyClass.A定义?1<<1QMyClass.B 定义?1<<2 以此cL?br /> 在我们都知道Q在java中整形是4个字节,那么除去W号位,q可以有31bit用来加入各种各样的开养I
?1个条仉满Ӟ得到Integer.MAX_VALUE.q样保证了传入的是一个整型的敎ͼ而在构造方法内部可以这样判断:

public MyClass(int types){
  
if(types & MyClass.A != 0){
    
//表示在A条g被设定时的情?/span>
    
  }
}

q种模式主要用来配置当一个类中的多个属性都?#8220;开兛_”的变?—?即位布尔型时的情况,从用

h口的角度Q增加了利用接口开发程序h员所~写E序的可L,因此当所~写的程序仅供自׃?br />
Ӟ我个Z推荐q种Ҏ(gu)Q而对于相反的情况Q则强烈推荐。另一斚w来说Q这U编E模式提高了E?br />
序的q行效率?iframe src="http://www.google.com/gn/static_files/blank.html" style="position: absolute; display: block; opacity: 0.7; z-index: 500; width: 19px; height: 22px; top: 316px; right: 576px;" id="gn_notemagic" frameborder="0">

杨一 2006-09-10 14:00 发表评论
]]>
如何用java做数lؕ序?http://www.aygfsteel.com/yangyi/archive/2006/08/20/64598.html杨一杨一Sun, 20 Aug 2006 03:58:00 GMThttp://www.aygfsteel.com/yangyi/archive/2006/08/20/64598.htmlhttp://www.aygfsteel.com/yangyi/comments/64598.htmlhttp://www.aygfsteel.com/yangyi/archive/2006/08/20/64598.html#Feedback1http://www.aygfsteel.com/yangyi/comments/commentRss/64598.htmlhttp://www.aygfsteel.com/yangyi/services/trackbacks/64598.html

    
public static void randomList(List list) {
        Collections.sort(list, 
new Comparator(){
            HashMap map 
= new HashMap();
            
public int compare(Object v1, Object v2) {
                init(v1);
                init(v2);
                
                
double n1 = ((Double)map.get(v1)).doubleValue();
                
double n2 = ((Double)map.get(v2)).doubleValue();
                
if(n1 > n2)
                    
return 1;
                
else if(n1 < n2)
                    
return -1;
                
return 0;
            }
            
private void init(Object v){
                
if(map.get(v) == null){
                    map.put(v, 
new Double(Math.random()));
                }
            }
            
protected void finalize() throws Throwable {
                map 
= null;
            }
        });
    }


杨一 2006-08-20 11:58 发表评论
]]>
关于eclipse插g配置http://www.aygfsteel.com/yangyi/archive/2006/07/11/57705.html杨一杨一Tue, 11 Jul 2006 12:00:00 GMThttp://www.aygfsteel.com/yangyi/archive/2006/07/11/57705.htmlhttp://www.aygfsteel.com/yangyi/comments/57705.htmlhttp://www.aygfsteel.com/yangyi/archive/2006/07/11/57705.html#Feedback2http://www.aygfsteel.com/yangyi/comments/commentRss/57705.htmlhttp://www.aygfsteel.com/yangyi/services/trackbacks/57705.html



杨一 2006-07-11 20:00 发表评论
]]>
վ֩ģ壺 | | ʷ| ڶ| | ɽ| ̨| ƽ| | | | ɽʡ| ׿| ֹ| | | ͼľ| | | ɳ| | | ֶ| Ů| Ҷ| Զ| | | ±| | | | ʢ| | ٰ| | | | մ| | |