同步类容器1

1.线程都是安全的。

2.在某些场景下需要加锁来保护“复合操作”

a.迭代:反复去访问元素、遍历完容器所有的元素

b.跳转:根据下标制定去访问查找元素

c.条件运算

3.复合操作在多线程并发修改内容时:可能会出现意外的行为、容器迭代的过程中被并发的修改了内容,这是早期的迭代器设计没有考虑的问题

同步类容器2

1.古老的vector、HashTable,这些容器的同步功能其实只是都有 Collections.synchronizedList(new ArrayList<String>()); 等工厂方法去创建时间的。

2.底层  synchronizedList 对每个公用方法都进行了同步,使得每次只有一个线程去访问容器的姿态(必须保证安全同时,也必须要有足够好的性能)。

例1

  1. package demo5;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.Vector;
  5. /**
  6. * Created by liudan on 2017/7/9.
  7. */
  8. public class MyThread1 extends Thread {
  9. /*同步类容器、动态数组*/
  10. public static void main(String[] args) {
  11. final Vector<String> ticksts = new Vector<>();
  12. List<Object> lsit = new ArrayList<>();
  13. for (int i=1;i<=10;i++){
  14. ticksts.add("G1001-火车票-G000X"+i);
  15. }
  16. for (int i=1;i<=10;i++){
  17. new Thread("线程00"+i){
  18. @Override
  19. public void run() {
  20. while (true){
  21. if (ticksts.isEmpty()) break;
  22. System.err.println(Thread.currentThread().getName()+"\t"+ticksts.remove(0));
  23. }
  24. }
  25. }.start();
  26. }
  27. }
  28. }

  29. 输出
  30. 线程001 G1001-火车票-G000X1
    线程001 G1001-火车票-G000X2
    线程001 G1001-火车票-G000X3
    线程001 G1001-火车票-G000X4
    线程002 G1001-火车票-G000X5
    线程002 G1001-火车票-G000X7
    线程001 G1001-火车票-G000X6
    线程001 G1001-火车票-G000X9
    线程001 G1001-火车票-G000X10
    线程002 G1001-火车票-G000X8

15.同步类容器Vector的更多相关文章

  1. 16.同步类容器Collections.synchronized

    voctor动态数组.同步类容器,底层实现基于:Collections.synchronized package demo5; import java.util.ArrayList; import j ...

  2. Java线程同步类容器和并发容器(四)

    同步类容器都是线程安全的,在某些场景下,需要枷锁保护符合操作,最经典ConcurrentModifiicationException,原因是当容器迭代的过程中,被并发的修改了内容. for (Iter ...

  3. 同步类容器和并发类容器——ConcurrentMap、CopyOnWrite、Queue

     一 同步类容器同步类容器都是线程安全的,但在某些场景中可能需要加锁来保证复合操作. 符合操作如:迭代(反复访问元素,遍历完容器中所有元素).跳转(根据指定的顺序找到当前元素的下一个元素).条件运算. ...

  4. JUC源码分析-集合篇:并发类容器介绍

    JUC源码分析-集合篇:并发类容器介绍 同步类容器是 线程安全 的,如 Vector.HashTable 等容器的同步功能都是由 Collections.synchronizedMap 等工厂方法去创 ...

  5. 并发编程(二)------并发类容器ConcurrentMap

    并发类容器: jdk5.0以后提供了多种并发类容器来替代同步类容器从而改善性能. 同步类容器的状态都是串行化的. 他们虽然实现了线程安全,但是严重降低了并发性,在多线程环境时,严重降低了应用程序的吞吐 ...

  6. C++线性序列容器<vector>简单总结

    C++线性序列容器<vector>简单总结 vector是一个长度可变的数组,使用的时候无须声明上限,随着元素的增加,Vector的长度会自动增加:Vector类提供额外的方法来增加.删除 ...

  7. STL标准库-容器-vector

    技术在于交流.沟通,本文为博主原创文章转载请注明出处并保持作品的完整性. 向量容器vector是一个动态数组,内存连续,它是动态分配内存,且每次扩张的原来的二倍. 他的结构如下 一 定义 vector ...

  8. JAVA基础知识总结15(集合容器)

    集合框架:用于存储数据的容器. 1:对象封装数据,对象多了也需要存储.集合用于存储对象. 2:对象的个数确定可以使用数组,但是不确定怎么办?可以用集合.因为集合是可变长度的. 集合和数组的区别: 1: ...

  9. 从零开始写STL—容器—vector

    从0开始写STL-容器-vector vector又称为动态数组,那么动态体现在哪里?vector和一般的数组又有什么区别?vector中各个函数的实现原理是怎样的,我们怎样使用会更高效? 以上内容我 ...

随机推荐

  1. Python VUE 基础知识

    一 什么是VUE 它是一个构建用户界面的JavaScript框架,自动生成(js,css,HTML文件) 二 如何使用VUE 1.  应用vues.js <script src="vu ...

  2. 爬虫基础库之requests

    requests Python标准库中提供了:urllib.urllib2.httplib等模块以供Http请求,但是,它的 API 太渣了.它是为另一个时代.另一个互联网所创建的.它需要巨量的工作, ...

  3. 初次接触express

    今天初次使用express,还是写写心得好了. 中间件 mothod nodemon ~的使用 中间件 中间件我觉得就是个开箱即用的工具,写好中间件函数,直接use就好. 示例1: let myLog ...

  4. python Mixin 是个啥?

    内容待添加... 参考文章: [1][python] Mixin 扫盲班

  5. nginx代理缓存

    (1)缓存介绍 1.代理服务器端缓存作用 减少后端压力,提高网站并发延时 2.缓存常见类型 服务器端缓存:代理缓存,获取服务器端内容进行缓存 浏览器端缓存 3.nginx代理缓存:proxy_cach ...

  6. jQuery文档处理

    1.wrap 把所有匹配的元素用其他元素的结构化标记包裹起来.(我的理解就是给匹配的元素穿一件衣服) 把所有的段落用一个新创建的div包裹起来 $("p").wrap(" ...

  7. 876. Middle of the Linked List【Easy】【单链表中点】

    Given a non-empty, singly linked list with head node head, return a middle node of linked list. If t ...

  8. ZSTU OJ 4272 最佳淘汰算法

    线段树. 处理出每个位置下一个位置是哪里.然后搞个线段树找一下最大值就可以了. #include<map> #include<set> #include<ctime> ...

  9. HDU 4888 Redraw Beautiful Drawings

    网络流. $s$向每一个$r[i]$连边,容量为$r[i]$. 每一个$r[i]$向每一个$c[j]$连边,容量为$k$. 每一个$c[j]$向$t$连边容量为$c[j]$. 跑最大流,中间每一条边上 ...

  10. Luogu P4148 简单题(K-D Tree)

    题面 题解 因为强制在线,所以我们不能$cdq$分治,所以考虑用$KDT$,$KDT$维护一个矩阵,然后询问的时候如果当前矩形在询问区间内,直接记贡献,否则判断当前点是否在矩阵内,然后左右分别递归下去 ...