25 Apr

java.util.concurrent中的线程工具

从1.5版本开始,jdk引入了java.util.concurrent包,其中包含了很多用于简化多线程开发的工具,java的并发编程,可以说变得很容易了。

一、线程池。

ExecutorService提供了线程池功能。ExecutorService的实例可以使用new SingleThreadExecutor()或者new FixedThreadPool()来获得。ExecutorService可以用来执行实现了Runnable接口的对象,或者实现了Callable接口的对象。Runnable是久已存在的接口,以前用作传给Thread对象的接口,现在也被各样的线程池用于传入的对象接口。Runnable接口只有一个run函数,函数没有参数,也没有返回值,需要获取运行状态的时候,就只能通过另外的手段。Callable接口的call方法则带有返回值,这个返回值是泛型化的,类型就是实现Callable接口时指定的那个T。

实例化一个ExecutorService后,就可以调用submit,invokeAll或者invokeAny来执行了。这些方法会返回会返回Future或者List对象,调用Future的get方法就可以拿到执行结果了。Future的这个get方法在子线程结束前是会堵塞的。

二、同步机制Lock/Condition,Semaphore,CountDownLatch,CyclicBarrier

java的同步是基于对象锁实现的,所有的对象都天然的带有一个单一锁,JVM会跟踪对象上锁的次数,未加锁时对象上的技术为0,一旦一个对象上锁的计数不为0,则只有已经在这个对象上加锁的线程才能继续获得这个线程上的锁。jdk1.5之前的互斥是通过synchronized关键字实现的,synchronized可以指定加锁的对象,如果没有指定锁定的对象,就锁在同步代码段自己所在的对象实例上。在进入synchronized代码段时对象上锁的技术加1,离开时减1,当同步代码段中有异常抛出时,JVM也会自动释放锁,因而synchronized是个挺好使的东西。

Lock的机制和synchronized是一样的,但是程序员可以手工控制lock和unlock的时机,并且提供了trylock(尝试能够获取锁但不会真的加锁)这样的方法,可控性更强一些。另外,unlock是需要写在finally代码段中的,以防有异常抛出造成锁没有释放。

Lock的一个好处是可以绑定多个Condition。Lock+Condition的组合,类似与synchronized+其加锁的对象上的监视器方法(wait,notify等)。Sun官方给出了一个生产者-消费者的例子,来说明Lock的这种用法。http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/util/concurrent/locks/Condition.html

Semaphore。顾名思义,它确实就是一个信号量……acquire方法获取一个资源,没有资源就会被阻塞,release释放一个资源。与锁的区别……参见各操作系统教科书上的习题集解答。

CountDownLatch是一个倒计时似的计数器,调用countDown()方法会减少计数,计数为0时被其阻塞的线程就被唤醒。CyclicBarrier与CountDownLatch类似,不过不实在计数为0时恢复阻塞的线程的执行,而是在计数到达设定的某个数值时;并且CyclicBarrier是可以用用的,CountDownLatch是一次性的。

三、并发集合类

包括ConcurrentHashMap,ConcurrentLinkedQueue,CopyOnWriteArrayList,BlockingQueue等。这些都是对应的java.utils中的集合类的高性能、线程安全的实现版本。以ConcurrentHashMap来说,其对应的容器版本是HashTable和HashMap/synchronizedMapHashMap不是线程安全的,而HashTable和synchronizedMap对单个操作是线程安全的,但是多个操作序列如果要保证同步,则必须要加锁,比如put-if-absent操作:如果不包含一个key,那么新增加一个key-value值。HashTable/synchronizedMap同步的代价是比较昂贵的,同步是基于加在这个对象本身上的一个单一锁,这样两个线程甚至没办法并发调用他们get方法,这个同步事实上是读-读也会互斥的。

ConcurrentHashMap实现了putIfAbsenct方法,并且,实现了好得多的并发性。几乎所有的读-读操作可以并发进行,读-写大部分也可以并发进行,甚至写-写操作有时也可以并发。

CopyOnWriteArrayList是一个实现了COW机制的集合类,比较适合于读多写少的情况。

BlockingQueue是一个阻塞队列。为空时获取元素的方法会阻塞,容量满事添加元素的操作会被阻塞。从这个集合类的功能设计可以看出,它的目的用途非常明确……以后用java来写生产者-消费者大作业的同学有福了。

四、原子操作类

Jdk2.5提供了以系列的atomic class来简化同步处理,包括AtomicLong, AtomicInteger, AtomicReference等。在java中,赋值、自增等运算都是无法保证原子性的,原子操作类通过包装了同步操作实现了相关操作的原子化版本。

22 Apr

UTF-8到GBK转码的特殊字符问题

Unicode字符集现在有超过10万个字符,其BMP部分也有六万多个字符;而GBK字符集只有两万以前多个字符。这样的话,从支持unicode字符集或者unicode字符集BMP的编码方式,转化到GBK编码的时候,就会有编码落到GBK字符集以外,不能转化成GBK编码。在java中,转换之后的字符串,这部分字符都变成了’?’。

通常这些都是非常生僻的字符,倒是可以不考虑;但是有一个特殊的unicode字符,不在GBK字符集中。却频繁用于xml/html等格式的文件中。这个字符unicode序号为0xA0,utf-8编码结果为C2A0,作用是一个排版空格——普通的ascii空格在xml/html中是被忽略的。大量UTF-编码的网页使用这个字符用作占位的空格。而且似乎浏览器对它的处理方式也不同:IE8浏览器会认得这个空格,firefox3.6简单的把它替换成 。当把一个utf-8编码的网页转成gbk编码时,这个字符就变成讨厌的问号了。

处理方法,就是在字符串以GBK编码写出之前,把这个字符替换掉:

str = str.replace('\u00A0', ' ');

彻底而保险的方法是过滤所有GBK不能表示的字符:

str = str.replaceAll("[^\u4E00-\u9FA5\u3000-\u303F\uFF00-\uFFEF\u0000-\u007F\u201c-\u201d]", " ");

17 Apr

韩寒-而你们在怕什么

立此存照。韩寒六点二十多更新,七点三十多文章被删。

今天,在一些论坛上,我看见了福建马尾审判三个网友,说真的,我的确完全不知道是怎么回事,于是,我就开始搜索,我先上了谷歌香港,结果就和我搜索胡萝卜和李子一样,页面再也无法打开,于是我上了百度,我只知道有三个网友,因为涉嫌诽谤,被抓了起来。那么他究竟诽谤谁了呢,诽谤了当地公安,我当时就想,这三个人完蛋了,诽谤了当地公安,再由当地法院审理,这审判结果岂他们不是都已经在当地饭店里谈好了。

本着公正的态度,我继续搜索这三个网友究竟是为什么诽谤了政府,但是线索到这里就断了,我先用了百度知道功能,百度表示不知道,当然,知道了也不会告诉你,于是,我使用了新浪爱问功能,结果爱问不问。最后,我大致知道了故事的内容,这其实是一个很典型的故事,为了防止出现文章过敏的情况,我一概隐去了人物姓名。

主人公突然死了,家属怀疑是被轮奸致死,提出尸检,尸检的结果是主人公自顾自病死,并非强奸致死。家属怀疑警方包庇罪犯,提出还要尸检,但是相关部门并不配合。家属的情绪很不稳定。三位维权人士听闻此事,以死者是被强奸至死的观点,的将此事件做成了视频和文章,转发到国内外论坛。当地公安召开新闻发布会,强调死者是自然病死,随后,参与制作视频发帖等人当地公安机关逮捕,其中主要负责的三人,二审被判有期徒刑一年到两年。

事情大致上就是这样的,就案情本身,关键是死者到底是怎么死的,这个我不知道,我也没有证据,所以无法站在维权者或者政府的任何一方说事。政府认为,只要他们宣布了,这就叫证据,维权者认为,只要他们调查了,这也是证据。这件事情我并不了解,在其他众多的维权事件中,政府一定全错么,不一定,维权者一定全对么,也不一定。但是为什么政府永远表现出全错的态势呢?

其实很多事情其实都是当地政府自己弄大的。如果他是真的自身突发疾病死亡,那么便让有公信力的地方来尸检,说服家属便是。很多网友说,政府急需成立廉政公署,来树立公信力,我认为廉政公署没有用,香港很少发生腐败事件,其实并不是拥有了廉政公署这四个字,而是因为廉政公署是独立的这三个字。我认为,大陆现在的国情是不适合成立一个独立的类似廉政公署的机构的,如果一成立然后来真的,那几乎所有公务员及其亲属都嗖一下不见了。但是,大陆最最急需成立的一个部门乃是独立的“尸检部”,这个尸检部必须拥有向廉政公署一样的独立性和公信力,必要的时候做到电视直播尸检。仔细回想中国近几年发生的公众事件,有多少是因为尸检而生。尸检部是维护社会稳定的重要部门,因为现在的尸检结果,无论是真的假的,老百姓都不相信。排除这件事情,虽然我认为,很可能不少的尸检结果是正确的,但老百姓的怀疑也不是错误的。一个喜欢先定性再定罪的政府,其绝招也很容易被老百姓学去,所以说,我们要原谅老百姓动不动就认为自己的亲人是被人害死,而罪犯是被政府包庇了,尸检是被政府操纵了。因为在这个社会里,你不讲证据,那我也不讲证据,你不透明,我就猜测,我一猜测,你就说我诽谤,我再追究,你就说这是国家机密,我一闹大,你就……你就……你就反而省事了,什么事情都不用做了,自然会有相关部门通知新闻部门这事情不准报道。但是,这一切埋下的都是仇恨的种子。

所以说,对于地方政府,这事情其实一开始就很好解决,绝对公正的尸检,如果真的是病死,说服家属,如果真的是被杀的,捉拿凶手。退一步讲,这个事情完全可以放到台面上,公开的去说清楚,大家拿各自的证据来说事,但官方是从来不屑于这么做的,他们认为这样降低了他们的威信。而且我们的官方永远是一开口就置自己于不利,你从来看不到他们坦诚的用我们人类正常交流的语言说话的时刻,永远用没有人性的官腔去对抗老百姓的哭诉。听音乐的朋友都知道,唱腔是多么的重要,一个你讨厌的唱腔,唱什么歌都是错的。

现在,那位女孩子是怎么死的已经不重要了,更重要的是那三位维权者的判决。至于诽谤罪,看来是非判不可了。类似的罪名不能从法律上去诠释,而是要从人情世故上去找结果。因为面子对于政府是很重要的,人家都关了你这么长时间了,尤其是因为这个理由,现在把你放出来,你法院是能得到喝彩,但是人家公安以后怎么混,都在一个县城里,抬头不见低头见,办公室不见桑拿见的,这见面了还怎么相处。其实这么多年,大家都误会了人民法院的意思,人民法院并不是指属于人民的并为人民服务的法院,而是指只负责解决人民与人民之间的矛盾的法院。

这三位替他人维权的网友,被判了一年到两年以后,很多网友认为,这件事情代表了互联网的黑暗时期将要到来,代表了维权人士将要遭到打击报复,代表了网络的监督将要受到取缔和法办,代表了言论自由的彻底消失,我认为其实这些都不是,小小的一个县城的公检法,你不能把人家想的那么深邃,其实这件事情只代表了一个意义,传达了一个讯息,那就是——让你见识见识我的厉害。

是的,让你见识见识我的厉害。我们见识了,我们都很害怕,但是我们也不知道,你们都在害怕些什么。

16 Apr

欧洲的绿化真是越来越严重了,讨好穆斯林,里外不是人

杀鸡方法违反《古兰经》肯德基遭英国穆斯林抵制

国际在线专稿:据英国《世界新闻报》消息,肯德基(KFC)在英国遭到民众的普遍抵制——不论穆斯林还是非穆斯林。英国穆斯林认为肯德基屠宰鸡的 方式不符合《古兰经》的规定,而非穆斯林的消费者则抱怨肯德基不销售猪肉食品。

  英国肯德基为了迎合穆斯林,特意开设了86个仅销售清真食品的分店。但穆斯林并没有肯定这一做法,反而谴责肯德基没有按照正确方式杀鸡。按照 《古兰经》的规定,动物应该在活着的时候由穆斯林宰杀,并且穆斯林在下刀宰杀前要诵读经文,这样的肉食才是符合规定的清真食品。而肯德基在杀鸡的时候,往 往先用机器把鸡打晕再杀。这就意味着约三分之一的鸡在被宰杀的时候可能已经死了,并且下刀宰杀前并没有诵读经文。鉴于上述原因,英国穆斯林组织的领导人表 示,倘若肯德基不能严格遵守这些规定,英国约240万穆斯林将拒吃肯德基。

  而非穆斯林的消费者抱怨,肯德基为迎合穆斯林,不出售猪肉类食品。这使许多民众喜爱的培根、香肠等食品无法在肯德基品尝到。

  据悉,英国穆斯林组织领导人将于14日与肯德基就“如何正确杀鸡”展开讨论。

from http://international.dbw.cn/system/2010/04/15/052453958.shtml.

16 Apr

今天又被要求紧急删除了一个图集

无非就是一个普通的图集,里面有一堆买房子的人而已。
普利策告诫自己的编辑们说:“什么是我们报纸的特色?就是斗争,揭露罪恶,为社会谋福利。”他在执笔撰写的第一期《纽约世界报》宣言中写道:“致力于人民的事业而非有权有势者的钱袋,并揭露一切欺骗行为,与社会上所有的坏人坏事和弊端作斗争,坚定诚挚地为 人民服务,为人民战斗。”这是普利策的新闻精神遗产,也是新闻报道和舆论监督的本质要义。
16 Apr

有诗云:

人品高洁数百度
公平竞争看瑞星
从不流氓是腾讯
安全可靠三六零

14 Apr

非诚勿扰的马诺

从本质上来说,马诺不是个坏女生吧,只不过不太懂事,比较贪玩,但是对于一个二十岁的女孩子这能算是什么错呢?马诺她错就错在,不该在《非常勿扰》上面待这么长时间,或许她并不是真是要去找到下个男朋友,只是觉得这样很有意思很好玩。

如果要论过错的话,孟非乐嘉的过错要大得多吧。他们自己当然都是很优秀的人,而且是是很优秀的主持人,所以就可以毫无顾忌的品论和摆弄别人。《非诚勿扰》到底是个娱乐节目,为了收视率,就要有争论,争论越大越好;尤其要有让观众觉得欠扁的人,越欠扁越好。确实他们成功找到了很多欠扁的人,但其中不应该有马诺。马诺虽然有错,但错还不至于受到如此待遇,仅仅因为她能吸引人的目光,因为她话直,因为她抗打击能力强,就一次次的设局来把马诺放在风暴的中心。

确实,非诚勿扰有个"诚"字,但是这个诚,不只是对男嘉宾或者女嘉宾,同样也是对你们主持人制作人说的。你孟非乐嘉果真就对得起这个"诚"字吗!看看你们找的男嘉宾,越是极品的越是要拿出来!收视率上去之后,你们还可以高高的站在道德的制高点上,去指摘别人的错误!

13 Apr

今天手又发抖了

安装mysql的时候,敲chown mysql data/ –R, 很悲剧的敲成了chown mysql data / –R。一闪而过之后,所有文件的owner都变成mysql了。

之后检查机器,ssh不能登录,普通用户无法su到root。

幸好还有一个root帐号挂在上面,先把/bin/, /sbin/, /lib/这样的目录全部chown到root,其他目录下group为root的都chown到root,/home/下的文件夹该给谁给谁。一番折腾后ssh可以登录了,但是普通用户仍然无法su到root。

之前以为是文件属主的原因,现在看来不是了。错误提示是authorisation faild,瞅了一眼/bin/su 的stick位没了。于是chmod +s /usr/bin,终于把问题都解决了。

02 Apr

那些中国式单词

Smilence(笑而不语)
Democrazy(痴心妄想)
Togayther(终成眷属)
Freedamn(自 由)
Shitizen(p民)
divoice(离婚宣言)
animale(男人天性)
Amerryca(享 乐国)
Innernet(互联网)
Departyment(有关部门)
suihide(躲猫猫)
don'train(动 车)
corpspend(捞尸费)
jokarlist/journaliest (记者)
vegeteal(偷菜)
Chinsumer(去 外国旅游的中国人)
sexretary(秘书)
canclensor(审查)
yakshit(亚克西)
carass(轻 拂菊花)
harmany(河蟹)

from newsmth.org

31 Mar

域名,放弃续费

dongliu.net这个域名是10个多月钱注册的。goddy第一年注册域名相当优惠,一个.net的域名第一年的费用也就$8多点。但是从第二年续费开始,每年的费用就需要20多刀了。况且这个域名从注册之日绑定google app起,就有一半的时间被盾在墙外,现在看情势,估计99%的时间都不能正常使用了。因此,期满之后,这个域名就不打算再续费了。

共277篇,第7/28页 首页 上一页 ... 2 3 4 5 6 7 8 9 10 11 12 ... 下一页 尾页