06 2012 档案

摘要:此列统计三种同步锁并发访问时消耗的时间public interface Counter { public long getValue(); public void increment();}/** * 内部锁 */public class SynchronizedBenchmarkDemo implements Counter { private long count = 0; @Override public long getValue() { return count; } @Override public synchroniz... 阅读全文
posted @ 2012-06-14 17:50 一筐 阅读(715) 评论(0) 推荐(0)
摘要:当需要对集合同时进行写入和读取操作时,如果多线程同时操作会出现异常,那么现在利用ReadWriteLock显示锁,可以在写入量比较小,读取量比较大的场景中,方便的实现上述功能。import java.util.Calendar;import java.util.Map;import java.util.TreeMap;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantReadWriteLock;/** * 可重入读写锁 */@SuppressWarnings("all&q 阅读全文
posted @ 2012-06-14 17:08 一筐 阅读(1421) 评论(0) 推荐(0)
摘要:类java.util.concurrent.Exchanger提供了一个同步点,在这个同步点,一对线程可以交换数据。每个线程通过exchange()方法的入口提供数据给他的伙伴线程,并接收他的伙伴线程提供的数据,并返回。 当在运行不对称的活动时很有用,比如当一个线程填充了buffer,另一个线程从buffer中消费数据的时候,这两个线程可以用Exchanger来交换数据。当两个线程通过Exchanger交换数据的时候,这个交换对于两个线程来说是线程安全的。两个线程都会等到自己的程序运行到Exchanger这个地方时,进行等待。然后再进行数据交换,交换完毕后,各自进行以后的程序流程。 以下这个程 阅读全文
posted @ 2012-06-14 16:28 一筐 阅读(472) 评论(0) 推荐(0)
摘要:一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。用给定的计数 初始化 CountDownLatch。由于调用了 countDown() 方法,所以在当前计数到达零之前,await 方法会一直受阻塞。之后,会释放所有等待的线程,await 的所有后续调用都将立即返回。这种现象只出现一次——计数无法被重置。如果需要重置计数,请考虑使用 CyclicBarrier。CountDownLatch 是一个通用同步工具,它有很多用途。将计数 1 初始化的 CountDownLatch 用作一个简单的开/关锁存器,或入口:在通过调用 countDown() 的线程打开入 阅读全文
posted @ 2012-06-14 16:01 一筐 阅读(488) 评论(0) 推荐(0)
摘要:一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用,所以称它为循环的 barrier。CyclicBarrier 支持一个可选的 Runnable 命令,在一组线程中的最后一个线程到达之后(但在释放所有线程之前),该命令只在每个屏障点运行一次。若在继续所有参与线程之前更新共享状态,此屏障操作 很有用。在实际应用中,有时候需要多个线程同时工作以完成同一件事情,而且在完成过程中,往往会等待 阅读全文
posted @ 2012-06-14 14:56 一筐 阅读(452) 评论(0) 推荐(0)
摘要:一个计数信号量。从概念上讲,信号量维护了一个许可集。如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可。每个 release() 添加一个许可,从而可能释放一个正在阻塞的获取者。但是,不使用实际的许可对象,Semaphore只对可用许可的号码进行计数,并采取相应的行动。Semaphore 通常用于限制可以访问某些资源(物理或逻辑的)的线程数目。例如,下面的类使用信号量控制对内容池的访问:import java.util.concurrent.Semaphore;public class PoolSemaphoreDemo { private static final... 阅读全文
posted @ 2012-06-14 13:44 一筐 阅读(602) 评论(0) 推荐(1)
摘要:构建一个新的线程的代价还是有些高的,因为它涉及与操作系统的交互。如果你的程序创建了大量生存期很短的线程,那就应该使用线程池。一个线程池包含大量准备运行的空闲线程。你将一个Runnable对象给线程池,线程池中的一个线程就会调用run方法。当run方法退出时,线程不会死亡,而是继续在池中准备为下一个请求提供服务。执行器(Executor)类有大量用来构建线程池的静态工厂方法,下表给出了一个总结。方法描述newCachedThreadPool在需要时创建新线程:空闲线程会被保留60秒newFixedThreadPool池包含固定数量的线程;空闲线程会一直被保留newSingleThreadExec 阅读全文
posted @ 2012-06-13 18:23 一筐 阅读(808) 评论(0) 推荐(0)
摘要:Runnable封装一个异步运行的任务;你可以把它想像成一个没有任何参数和返回值的异步方法。Callable和Runnable相似,但它有返回值。Callable接口是一个参数化的类型,只有一个方法call。public interface Callable<V>{ V call() throws Exception;}类型参数是返回值的类型。例如,Callable<Integer>代表一个最终返回Integer对象的异步计算。 Future保存异步计算的结果。当你使用Future对象时,你就可以启动一个计算,把计算结果给某线程,然后就去干你自己的事。Future对象的 阅读全文
posted @ 2012-06-13 16:04 一筐 阅读(432) 评论(0) 推荐(0)
摘要:队列以一种先进先出的方式管理数据。如果你试图向一个已经满了的阻塞队列中添加一个元素,或是从一个空的阻塞队列中移除一个元素,将导致线程阻塞。在多线程进行合作时,阻塞队列是很有用的工具。工作者线程可以定期的把中间结果存到阻塞队列中。而其他工作者线程把中间结果取出并在将来修改它们。队列会自动平衡负载。如果第一个线程集运行的比第二个慢,则第二个线程集在等待结果时就会阻塞。如果第一个线程集运行的快,那么它将等待第二个线程集赶上来。 下面的程序展示了如何使用阻塞队列来控制线程集。程序在一个目录及它的所有子目录下搜索所有文件,打印出包含指定关键字的文件列表。 java.util.concurrent... 阅读全文
posted @ 2012-06-13 15:13 一筐 阅读(962) 评论(0) 推荐(0)
摘要:我们的图片大部分都是可以转换成base64编码的data:image。 这个在将canvas保存为img的时候尤其有用。虽然除ie外,大部分现代浏览器都已经支持原生的基于base64的encode和decode,例如btoa和atob。(将canvas画布保存成img并强制改变mimetype进行下载,会在下一篇记录)但是处于好奇心,还是驱使我去了解下base64编码的原理。以便也在不支持原生base64编码的ie下可以得以实现。【Base64】-base64的编码都是按字符串长度,以每3个8bit的字符为一组,-然后针对每组,首先获取每个字符的ASCII编码,-然后将ASCII编码转换成8b 阅读全文
posted @ 2012-06-08 18:05 一筐 阅读(398) 评论(0) 推荐(0)
摘要:webservice的原理及概念1 webservice所谓webservice就是定义了一套标准的调用过程:a 服务器首先用一套标准的方法向外界描述它所提供的服务的内容,就属于WSDLb 客户端需要以一种标准的协议来调用此服务,这属于SOAP.c 服务提供者将服务内容放在一个公共的网址让大家查询,就属于UDDI.2 命名空间命名空间其主要目的通过加一个命名属性,使名称保持唯一性。WSDL有大量的使用命名空间的地方。本质上WSDL是一个XML文件,作为一个XML文件,为了区别同名的元素,就需要采用命名空间的概念。3 WSDL的本质:服务内容的标准化描述WSDL的全称是web service D 阅读全文
posted @ 2012-06-08 17:15 一筐 阅读(13959) 评论(1) 推荐(1)
摘要:声明:本文内容是我在linux虚拟机上安装fastdfs的过程记录,主要用于个人备忘。由于我本人对于linux不太熟悉,安装过程中遇到很多错误,若高手看到本篇文章,希望能够指点一二。虚拟机:Sun VirtualBox操作系统:CentOS-6.2-i386-LiveCD.iso用到的工具SecureCRT和WinSCP4。开启sshd服务:service sshd start 把网卡重启: service network restart还要把防火墙关掉: service iptables stop首先参照网址http://lnmp.org/install.html来安装LNMP:1 wget 阅读全文
posted @ 2012-06-04 15:45 一筐 阅读(694) 评论(0) 推荐(0)
摘要:大家可能注意到了,网页上有些图片的src或css背景图片的url后面跟了一大串字符,比如:data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAYAAABIdFAMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHhJREFUeNo8zjsOxCAMBFB/ KEAUFFR0Cbng3nQPw68ArZdAlOZppPFIBhH5EAB8b+Tlt9MYQ6i1BuqFaq1CKSVcxZ2Acs6406KUgpt5/ LCKuVgz5BDCSb13ZO99ZOdcZGvt4m 阅读全文
posted @ 2012-06-01 12:22 一筐 阅读(13260) 评论(1) 推荐(1)