首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

以一个字符串添同步锁

2012-08-21 
以一个字符串加同步锁LockDataimport java.util.ArrayListimport java.util.HashMapimport java.util.Li

以一个字符串加同步锁
LockData

import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;public class LockData {private static List lockKeys;private static LockData lockData;static {lockData = new LockData();lockKeys = new ArrayList();Object lockKey = null;for(int i=0;i<10000;i++){lockKey = new Object();lockKeys.add(lockKey);}}/** * 加入值 * @param key * @return */public static synchronized Object requireLock(String key) {//System.out.println("size="+lockKeys.size());int a = key.hashCode() % 10000;System.out.println(a);Object lock = lockKeys.get(key.hashCode() % 10000);return lock;}}



TestLock
public class TestLock implements Runnable {private String a;public TestLock(String a) {this.a = a;}public void run() {// TODO Auto-generated method stubtry {Object data = LockData.requireLock(a);//System.out.println("a="+a);synchronized (data) {//System.out.println("Thread name : "+Thread.currentThread().getName());try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}//System.out.println("end" + a);}} finally {}}public static void main(String[] args) {for (int i = 0; i < 100000; i++) {TestLock ts = new TestLock("1");new Thread(ts,i+"").start();}}}

热点排行