当前位置:首页 » 编程博文
开发技术指南» 文章正文
    引言: 不变对象具有许多能更方便地使用它们的特性,包括不严格的同步需求和不必考虑数据讹误就能自由地共享和高速缓存对象引用。
 

 

 ·c#中调用windows api的要点    »显示摘要«
    摘要:在.net framework sdk文档中,关于调用windows api的指示比较零散,并且其中稍全面一点的是针对visual basic .net讲述的。本文将c#中调用api的要点汇集如下,希望给未在c#中使用过api的朋友一点帮助。另外如果安装了visual studio .net的话,在c:\program files\microsoft visual studio .net\fram......
 ·在c#中使用热键隐含窗口    »显示摘要«
    摘要: 在c#中采用的是事件驱动方式,但在我们使用的过程中,有时候通过调用系统原有的消息,处理起来会比较简单一些,特别是在处理与dll文件的交互时,的确是非常的方便。 在c#中使用自定义消息 在c#中使用自定义消息非常简单,只需要下面几个简单的步骤就可以了:1、 定义消息定义消息的方法和vc中定义消息有一点点不同比如在vc中申明一个自定义消息:#define wm_test wm_user + 101而......


Java 理论与实践:变还是不变?
不变对象具有许多能更方便地使用它们的特性,包括不严格的同步需求与不必考虑数据讹误就能自由地共享与高速缓存对象引用.尽管不变性可能未必对于所有类都有意义,但大多数程序中至少有一些类将受益于不可变.在本月的 java 理论与实践中,brian goetz 说明了不变性的一些长处与构造不变类的一些准则.请在附带的论坛中与作者与其他读者分享您关于本文的心得.(也可以单击文章顶部或底部的“讨论”来访问论坛.)

不变对象是指在实例化后其外部可见状态无法更改的对象.java 类库中的 string.integer 与 bigdecimal 类就是不变对象的示例 — 它们表示在对象的生命期内无法更改的单个值.

【程序编程相关:一些珍藏代码奉献,绝对有价值,不可不看!

不变性的长处 【推荐阅读:软件分享之VNN (内网应用不必再考虑N

自由高速缓存 【扩展信息:对黑洞的疑惑

如果正确使用不变类,它们会极大地简化编程.因为它们只能处于一种状态,所以只要正确构造了它们,就决不会陷入不一致的状态.您不必复制或克隆不变对象,就能自由地共享与高速缓存对它们的引用;您可以高速缓存它们的字段或其方法的结果,而不用担心值会不会变成失效的或与对象的其它状态不一致.不变类通常产生最好的映射键.而且,它们本来就是线程安全的,所以不必在线程间同步对它们的访问.

因为不变对象的值没有更改的危险,所以可以自由地高速缓存对它们的引用,而且可以肯定以后的引用仍将引用同一个值.同样地,因为它们的特性无法更改,所以您可以高速缓存它们的字段与其方法的结果.

如果对象是可变的,就必须在存储对其的引用时引起注意.请考虑清单 1 中的代码,其中排列了两个由调度程序执行的任务.目的是:现在启动第一个任务,而在某一天启动第二个任务.

清单 1. 可变的 date 对象的潜在问题 date d = new date(); scheduler.scheduletask(task1, d); d.settime(d.gettime() + one_day); scheduler.scheduletask(task2, d);

因为 date 是可变的,所以 scheduletask 方法必须小心地用防范措施将日期参数复制(可能通过 clone())到它的内部数据结构中.不然,task1 与 task2 可能都在明天执行,这可不是所期望的.更糟的是,任务调度程序所用的内部数据结构会变成讹误.在编写象 scheduletask() 这样的方法时,极其容易忘记用防范措施复制日期参数.如果忘记这样做,您就制造了一个难以捕捉的错误,这个错误不会马上显现出来,而且当它暴露时人们要花较长的时间才会捕捉到.不变的 date 类不可能发生这类错误.

固有的线程安全

大多数的线程安全问题发生在当多个线程正在试图并发地修改一个对象的状态(写-写冲突)时,或当一个线程正试图访问一个对象的状态,而另一个线程正在修改它(读-写冲突)时.要防止这样的冲突,必须同步对共享对象的访问,以便在对象处于不一致状态时其它线程不能访问它们.正确地做到这一点会很难,需要大量文档来确保正确地扩展程序,还可能对性能产生不利后果.
...   下一页
 ·用c#编写获取远程ip,mac的方法    »显示摘要«
    摘要:如果要想获得远程的地址,需要用sendarp这个函数来实现。具体的代码如下:[dllimport("iphlpapi.dll")]private static unsafe extern int sendarp(int32 dest,int32 host,ref intptr mac,ref intptr length);[dllimport("ws2_32.dll&......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE