22-CopyOnWriteArrayList应用
来源:互联网 发布:螺纹轴编程 编辑:程序博客网 时间:2024/06/14 07:59
一、主要内容
CopyOnWriteArrayList应用。
代码实现相同key的对象,不能同时刻运行;不同key,可以。
二、代码
import java.util.Iterator;import java.util.concurrent.CopyOnWriteArrayList;// 不能改动此Test类public class Test extends Thread {private TestDo testDo;private String key;private String value;public Test(String key, String key2, String value) {this.testDo = TestDo.getInstance();/* * 常量"1"和"1"是同一个对象,下面这行代码就是要用"1"+""的方式产生新的对象, * 以实现内容没有改变,仍然相等(都还为"1"),但对象却不再是同一个的效果 *//* * a = "1"+""; b = "1"+"" */this.key = key + key2;this.value = value;}public static void main(String[] args) throws InterruptedException {Test a = new Test("1", "", "1");Test b = new Test("1", "", "2");Test c = new Test("3", "", "3");Test d = new Test("4", "", "4");System.out.println("begin: " + (System.currentTimeMillis() / 1000));a.start();b.start();c.start();d.start();}public void run() {testDo.doSome(key, value);}}class TestDo {private TestDo() {}private static TestDo _instance = new TestDo();public static TestDo getInstance() {return _instance;}// private ArrayList keys = new ArrayList();// 并发集合类,解决集合在迭代时不能修改的问题private CopyOnWriteArrayList keys = new CopyOnWriteArrayList();public void doSome(Object key, String value) {Object o = key;if (!keys.contains(o)) {keys.add(o);System.out.println("keys: " + keys);} else {System.out.println("---");for (Iterator iter = keys.iterator(); iter.hasNext();) {try {Thread.sleep(20);} catch (InterruptedException e) {e.printStackTrace();}Object oo = iter.next();if (oo.equals(o)) {o = oo;break; }}}// 同一个o时,同步加锁synchronized(o) { // 以大括号内的是需要局部同步的代码,不能改动!try {Thread.sleep(1000);System.out.println(key + " : " + value + " : "+ (System.currentTimeMillis() / 1000));} catch (InterruptedException e) {e.printStackTrace();}}}}
程序输出
0 0
- 22-CopyOnWriteArrayList应用
- CopyOnWriteArrayList应用详解
- CopyOnWriteArrayList
- CopyOnWriteArrayList
- CopyOnWriteArrayList
- CopyOnWriteArrayList
- CopyOnWriteArrayList
- CopyOnWriteArrayList
- CopyOnWriteArrayList
- CopyOnWriteArrayList
- CopyOnWriteArrayList
- CopyOnWriteArrayList
- CopyOnWriteArrayList
- CopyOnWriteArrayList
- CopyOnWriteArrayList
- CopyOnWriteArrayList
- CopyOnWriteArrayList
- CopyOnWriteArrayList
- 21-Semaphore应用
- 使用Java JDK操作ZIP小结
- zip4j -- Java处理zip压缩文件的完整解决方案
- 纪念帖,终于下定决心写博文
- java压缩解压缩rar、zip 、tar文件 工具类源码
- 22-CopyOnWriteArrayList应用
- 5.1简述智能卡的发展,以及射频电子标签在其中所处的位置。
- 字典树
- 如何进行js的跨域数据传输?
- Linux中如何使用dmesg输出内核信息
- 说说数据处理的两种模式
- 共享内存的常用函数详解shmget shmat
- bluetoothchat的学习
- 31 DMA控制器(SAM9G25[DATASHEET])