`

多线程之集合类

    博客分类:
  • java
阅读更多

 

  CopyOnWriteArrayList 

  ConcurrentHashMap

  CopyOnWriteArraySet

 

 public class SynCollectionTest {

 //1.同步list: 每个线程都添加一个元素,看总数
 private CopyOnWriteArrayList<String> list = new CopyOnWriteArrayList<String>(); //线程安全
 //private List<String> list = new ArrayList<String>(); //线程不安全、会报错
 
 public static void main(String[] args) {
  SynCollectionTest o = new  SynCollectionTest();
  for(int i=0;i<100;i++) {
   o.new ListThread().start();
  }
 }

 class ListThread extends Thread{
  
  public void run() {
   list.add("str");
   System.out.println(list.size());
  }
 }
}

public class SynMapTest {
 
 private ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<String, Integer>(); //线程安全,键、值不能为空值
 //private Hashtable<String, Integer> map = new Hashtable<String, Integer>(); //线程不安全
 //private HashMap<String, Integer> map = new HashMap<String, Integer>(); //线程不安全,抛出异常

 public static void main(String[] args) {
  SynMapTest o = new SynMapTest();
  for(int n=0;n<1000;n++) {
   o.map.put("s"+n, new Integer(0));
  }
  //并发删除,抛出异常 java.util.ConcurrentModificationException
  for(int i=0;i<10;i++) {
   o.new MapThread().start();
  }
 }

 class MapThread extends Thread{
  public void run() {
   Set<String> keys = map.keySet();
   for(String k : keys) {
    map.remove(k);
   }
  }
 }
}

public class SynSet {

 private CopyOnWriteArraySet<String> set = new CopyOnWriteArraySet<String>(); //线程安全
 //private Set<String> set = new HashSet<String>(); //线程不安全,抛出异常java.util.ConcurrentModificationException
 
 private Random r = new Random();
 
 public static void main(String[] args) {
  SynSet o = new SynSet();
  for(int i=0;i<1000;i++) {
   o.set.add(String.valueOf(o.r.nextInt(1000)));
  }
  
  for(int i=0;i<10000;i++) {
   o.new SetThread().start();
  }
 }
 
 class SetThread extends Thread{
  
  public void run() {
   Iterator<String> keys = set.iterator();
   String k = null;
   while(keys.hasNext()) {
    k = keys.next();
    set.remove(k);
   }
  }
 }

}

 

 

 

0
0
分享到:
评论
1 楼 mike_eclipse 2018-04-25  
Hashtable是线程不安全的吗?好像是线程安全的吧?

相关推荐

    C# 多线程资料集合

    在"C#多线程学习.doc"文档中,可能涵盖了线程的基本用法,如`System.Threading.Thread`类的使用,创建和启动线程的方法,以及如何控制线程的生命周期(如Join、Abort和Suspend等)。 其次,"thread.pdf"可能详细...

    Java多线程安全集合

    Java提供了一系列的线程安全集合类,它们是专门为多线程环境设计的。 首先,我们要了解什么是线程安全。线程安全是指一个类或者方法在多线程环境中被调用时,能够正确地处理并发访问,不会因为线程间的交互而产生...

    Java多线程运算集合

    ### Java多线程运算集合知识点解析 #### 一、Java多线程概念与原理 - **操作系统中的线程与进程**: - **进程**:指的是一个正在运行的应用程序,每个进程都拥有独立的内存空间。 - **线程**:是进程中的一个...

    java集合类线程安全.doc

    Java 集合类线程安全 Java 集合框架是由 Java 平台标准版 1.2 引入的通用数据结构与算法框架。其灵活的面对对象设计受到了广大 Java 程序员的一致青睐,为 Java 平台的成熟奠定了坚实的基础。 线程安全不是一个...

    多线程中使用Java集合类.doc

    在多线程环境中,使用Java集合类需要注意线程安全问题,因为不同的线程可能会同时访问和修改集合,导致数据不一致或引发异常。本篇主要讨论在并发编程中使用Java集合类的一些关键知识点。 首先,Java集合框架中的大...

    多线程集合及IO面试

    ### 多线程集合及IO面试知识点概览 #### 逻辑思考题解析 1. **果冻颜色问题**: - 这是一个经典的抽屉原理(鸽巢原理)的应用问题。根据题意,桶里有黄色、绿色和红色三种颜色的果冻。如果随机抓取果冻,为了确保...

    Java集合多线程安全.docx

    然而,并非所有集合类都是线程安全的,这在多线程环境中可能导致数据不一致或者运行时异常。线程安全指的是一个对象在多线程环境下可以被正确地访问和修改,而不会出现竞态条件或死锁等问题。 线程不安全的集合类...

    大漠多线程模板_大漠_大漠多线程_

    在C#中,`System.Threading`命名空间提供了大量的类和方法来支持多线程编程,如`Thread`、`ThreadPool`、`Task`等。大漠的模板可能整合了这些工具,并进行了封装,使得开发者可以更方便地创建、管理和同步线程。 ...

    多线程资源共享集合

    本文将深入探讨多线程环境下如何管理和控制资源共享,主要关注`synchronized`关键字、`Runnable`接口以及`Thread`类的使用。 首先,让我们了解什么是多线程。多线程是指在一个进程中同时执行多个线程,每个线程都有...

    多线程并行执行,汇总结果

    Java提供了多种线程安全的集合,如`ConcurrentHashMap`、`AtomicInteger`等,它们在多线程环境下能够保证数据的一致性和完整性。线程可以在执行过程中将计算结果放入这些线程安全的数据结构,而无需担心数据竞争的...

    jdk中线程安全的集合类.docx

    综上所述,`ConcurrentHashMap`和`ConcurrentSkipListMap`都是为了解决多线程环境下的并发问题而设计的高效线程安全集合类。`ConcurrentHashMap`通过分段锁和细粒度锁的机制提高了并发性能,而`...

    JAVA多线程编程技术PDF

    总结起来,“JAVA多线程编程技术PDF”涵盖了多线程的基本概念、同步机制、线程通信、死锁避免、线程池以及线程安全的集合类等内容。通过深入学习这份资料,开发者可以全面掌握Java多线程编程技术,提升程序的并发...

    java多线程的讲解和实战

    8. **并发集合类**:Java提供了并发安全的集合类,如`ConcurrentHashMap`, `CopyOnWriteArrayList`, `BlockingQueue`等,它们内部实现了线程安全的算法,可以在多线程环境下高效使用。 9. **线程中断**:`interrupt...

    C#多线程List的非线程安全性

    2. 使用线程安全的集合:.NET框架提供了线程安全的集合类,如ConcurrentBag、ConcurrentQueue和ConcurrentStack等,它们在内部实现了线程同步,可以安全地在多线程环境下使用。 3. 避免在多线程环境中直接修改List...

    多线程面试题

    Java提供了一些线程安全的集合类,如Vector、ConcurrentHashMap等。 12. **线程局部变量**:ThreadLocal是线程局部变量的容器,每个线程都有自己的副本,互不影响。它常用于为线程提供独立的副本,避免了同步开销。...

    c# 多线程 上位机

    本篇将深入探讨在C#中实现多线程技术及其在上位机中的应用。 一、C#多线程基础 1.1 线程概述:线程是操作系统分配CPU时间的基本单位,每个进程至少包含一个线程。多线程允许程序同时执行多个任务,提高了计算资源...

    多线程环境下如何正确使用Java集合类.pdf

    多线程环境下如何正确使用Java集合类

    C#线程例子集合

    1. **多线程互斥**: - **Mutex**:C#中Mutex对象用于同步对共享资源的访问,确保任何时候只有一个线程可以访问该资源。通过调用Mutex.WaitOne()方法获取锁,完成后使用Mutex.ReleaseMutex()释放锁。这对于避免数据...

    java多线程设计模式_java_设计模式_多线程_多线程课题_

    Java提供了一些线程安全的集合类,如ConcurrentHashMap、CopyOnWriteArrayList和CopyOnWriteArraySet,它们在多线程环境下提供了高并发的访问性能。 九、死锁检测与避免 死锁是多线程编程中的常见问题,两个或多个...

    java多线程面试题59题集合

    以上只是Java多线程面试中可能会遇到的一部分问题,实际的59题集合可能涵盖更多细节和深度,包括线程安全的类、线程通信的高级技术、并发设计模式等。掌握这些知识点,不仅有助于应对面试,更能提高在实际开发中处理...

Global site tag (gtag.js) - Google Analytics