多线程之集合类 -凯发k8国际

`

多线程之集合类

    博客分类:
  • java

 

  copyonwritearraylist 

  concurrenthashmap

  copyonwritearrayset

 

 public class syncollectiontest {

 //1.同步list: 每个线程都添加一个元素,看总数
 private copyonwritearraylist list = new copyonwritearraylist(); //线程安全
 //private list list = new arraylist(); //线程不安全、会报错
 
 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 map = new concurrenthashmap(); //线程安全,键、值不能为空值
 //private hashtable map = new hashtable(); //线程不安全
 //private hashmap map = new hashmap(); //线程不安全,抛出异常

 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 keys = map.keyset();
   for(string k : keys) {
    map.remove(k);
   }
  }
 }
}

public class synset {

 private copyonwritearrayset set = new copyonwritearrayset(); //线程安全
 //private set set = new hashset(); //线程不安全,抛出异常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 keys = set.iterator();
   string k = null;
   while(keys.hasnext()) {
    k = keys.next();
    set.remove(k);
   }
  }
 }

}

 

 

 

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

相关推荐

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

    01大数据面试复习----java基础---集合类、多线程、jvm.zip

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

    java集合类中,某个线程在 collection 上进行迭代时,通常不允许另一个线性修改该 collection。通常在这些情况下,迭代的结果是不确定的。如果检测到这种行为,一些迭代器实现(包括 jre 提供的所有通用 collection ...

    1. 使用正则表达式验证邮箱格式:演示如何使用正则表达式验证邮箱地址的格式是否有效。...10. 多线程编程:创建和启动线程:展示了如何通过实现runnable接口创建一个新线程,并演示了多线程编程的基本概念。

    31 java 理论与实践 并发集合类.mht 32 java 理论与实践 构建一个更好的 hashmap.mht 33 java 理论与实践 jdk 5_0 中更灵活、更具可伸缩性的锁定机制.mht 34 java 理论与实践 流行的原子.mht 35 java 理论与实践...

    thread概念 thread实现方法 thread生命周期 thread的安全和锁 concurrent包(安全集合类、安全queue) 线程阻塞机制 线程池详解(原理,实际使用) 线程的监控,分析方法 扩展数据库连接池

    并发集合:juc提供了一些线程安全的集合类,如concurrenthashmap、concurrentlinkedqueue等,可以在多线程环境下安全地访问和修改集合。 原子操作:juc提供了一些原子操作类,如atomicinteger、atomiclong等,可以...

    java相关基础知识:面向对象的基本特征,集合类比较,简单数类型与包装类,异常捕捉,重载,重写

    对一个键可以同时存储多个值,类型安全,线程安全,附有测试代码

    数俎 常用类 异常 集合 i0流 lambda 多线程 网络编程 反射 注解

    1.线程池 (thread pool): 线程池是用于执行异步任务的托管线程集合。当你想执行许多类似的异步任务时,使用线程池可以有效地管理资源。 2.创建新线程 (manual thread): 你可以使用 thread 类来创建并管理一个新线程...

    1.1为什么需要多线程 1.2不安全示例 1.3并发问题的根源 1.4jmm 1.5线程安全的分类 1.6线程安全的方法 二、线程基础 2.1状态 2.2使用方式 2.3基础机制 2.4中断 2.5互斥同步 2.6线程合作 三、...

    这两类都要使用到io多路复用,o多路复用是指单个进程/线程就可以同时处理多个io请求。有三个方式select、poll、epoll。 select:将文件描述符放入一个集合中,调用select时,将这个集合从用户空间拷贝到内核空间...

    内容概要:以上列出的java面试题涵盖了java语言的基础知识、面向对象编程、集合、io流、多线程、反射、类加载器、jvm、序列化、泛型、异常处理、注解等多个方面。 适用人群:以上java面试题适用于准备java开发...

    每个示例都展示了不同的方面,涵盖了面向对象编程、继承和多态、接口和实现、异常处理、集合框架、文件操作、多线程、输入输出、lambda表达式和数据库连接等关键主题。 以下是每个示例的简要介绍: 1. 类和对象:...

    文章目录1、进程与线程2、创建多线程2.1、继承thread类2.2、实现runnable接口2.3、使用匿名内部类实现2.4、实现runnable接口的好处2.5、使用callable和future创建线程3、线程的生命周期4、几种特殊线程4.1、join线程...

    概念 • 实现方法 • 生命周期 • 安全和锁 • concurrent包(安全集合类、安全queue) • 线程阻塞机制 • 线程池详解(原理,实际使用) • 线程的监控,分析方法 • 扩展数据库连接池

    多线程就涉及到临界资源的访问问题,这里使用了vector集合对象,另外,在必要的地方还使用了synchronized锁住共享对象; 3. 管道通信 为了不打乱第三方调用程序的处理逻辑,这里使用了管道通信技术,将内部下载...

    概念 实现方法 生命周期 安全和锁 concurrent包(安全集合类、安全queue) 线程阻塞机制 线程池详解(原理,实际使用) 线程的监控,分析方法 扩展数据库连接池

global site tag (gtag.js) - google analytics
网站地图