跳表是一种与平衡二叉树性能类似的数据结构,其主要是在有序链表上使用。在JUC提供的几何中有两个支持有跳表操作的集合类型:
- ConcurrentSkipListMap
- ConcurrentSkipListSet
跳表实现原理有意思。可以百度了解了解
1、使用ConcurrentSkipListMap集合的例子:
package com.mydemo;
import java.util.Map;
import java.util.concurrent.ConcurrentSkipListMap;
import java.util.concurrent.CountDownLatch;
public class JUCDemo {
public static void main(String[] args) throws InterruptedException {
// 同步处理
CountDownLatch countDownLatch = new CountDownLatch(10);
// Map集合
Map<String, Integer> all = new ConcurrentSkipListMap<>();
// 循环创建线程
for(int i = 0; i < 100; i++){
new Thread(()->{
// 保存数据
for (int j = 0; j < 10; j++){
all.put(Thread.currentThread().getName() + "-" + j , j);
}
// 减少计数
countDownLatch.countDown();
// 查看所有数据
// System.out.println(all);
}, "集合操作线程-" + i).start();
}
// 等待子线程
countDownLatch.await();
System.out.println("==========================================");
System.out.println(all.get("集合操作线程-46-4"));
}
}
2、使用ConcurrentSkipListSet集合的例子:
package com.mydemo;
import java.util.Set;
import java.util.concurrent.ConcurrentSkipListSet;
import java.util.concurrent.CountDownLatch;
public class JUCDemo {
public static void main(String[] args) throws InterruptedException {
// 同步处理
CountDownLatch countDownLatch = new CountDownLatch(10);
// Set集合
Set<String> all = new ConcurrentSkipListSet<>();
// 循环创建线程
for(int i = 0; i < 100; i++){
new Thread(()->{
// 保存数据
for (int j = 0; j < 10; j++){
all.add(Thread.currentThread().getName() + "-" + j);
}
// 减少计数
countDownLatch.countDown();
// 查看所有数据
// System.out.println(all);
}, "集合操作线程-" + i).start();
}
// 等待子线程
countDownLatch.await();
System.out.println("==========================================");
System.out.println(all.contains("集合操作线程-0-0"));
}
}