public class KeywordCount {
public static Map<String,AtomicLong> KeywordMap=new ConcurrentHashMap<String, AtomicLong>();
static CountDownLatch countdown=new CountDownLatch(4 );
public static void main (String[] args) throws InterruptedException {
String keyword[]=new String[]{"倔强" ,"顽固" ,"纯真" ,"温柔" };
for (int i = 0 ; i < keyword.length; i++) {
new Thread(new Runnable() {
@Override
public void run () {
put(keyword);
countdown.countDown();
}
}).start();
}
countdown.await ();
System.out .println(KeywordMap);
}
private static void put (String[] keyword) {
AtomicLong count;
for (String key : keyword) {
count = KeywordMap.get (key);
if (count==null ){
AtomicLong newCount=new AtomicLong(0 );
count=KeywordMap.putIfAbsent(key, newCount);
if (count==null ){
count=newCount;
}
}
count.incrementAndGet();
}
}
}
public class KeywordCount2 {
public static Map<String,Long> KeywordMap=new ConcurrentHashMap<String, Long>();
static CountDownLatch countdown=new CountDownLatch(4 );
public static void main (String[] args) throws InterruptedException {
String keyword[]=new String[]{"倔强" ,"顽固" ,"纯真" ,"温柔" };
for (int i = 0 ; i < keyword.length; i++) {
new Thread(new Runnable() {
@Override
public void run () {
System.out .println(Thread.currentThread().getName());
put(keyword);
countdown.countDown();
}
}).start();
}
countdown.await ();
System.out .println(KeywordMap);
}
private static void put (String[] keyword) {
Long oldValue ,newValue;
for (String key : keyword) {
while (true ){
oldValue = KeywordMap.get (key);
if (oldValue==null ){
newValue=1 L;
if (KeywordMap.putIfAbsent(key, newValue)==null ){
break ;
}
}else {
newValue=oldValue+1 ;
if (KeywordMap.replace(key, oldValue, newValue)){
break ;
}
}
}
}
}
}