同步类容器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. linux命令(9):route命令

    查看路由表:route –n //添加到主机的路由 # route add –host 192.168.168.110 dev eth0 # route add –host 192.168.168.1 ...

  2. AIOps-一位研发工程师的学习笔记

    https://blog.csdn.net/wxm6614/article/details/80457568

  3. AC日记——[SCOI2009]游戏 bzoj 1025

    [SCOI2009]游戏 思路: 和为n的几个数最小公倍数有多少种. dp即可: 代码: #include <bits/stdc++.h> using namespace std; #de ...

  4. web前端—css面试题

    1.CSS 选择符有哪些? 2.CSS 优先级的选择过程? 优先级复合就近原则,同权重的情况下有限选择最近的属性. 载入样式的话是以最后载入的定位为准. 优先级: !important > id ...

  5. Vue结合原生js实现自定义组件自动生成

    就目前三大前端主流数据驱动框架(vue,ng,react)而言,均具有创建自定义组件的api,但都是必须先做到事先写好挂载点,这个挂载点可以是原有静态元素标签也可以是自定义模板:对于多种组件通过同一数 ...

  6. tomcat放置静态html页面

    因公司tomcat网站需要部署一个html的静态网页上去 在项目目录下建立了一个 /usr/local/tomcat/apache-tomcat-brain-api/webapps/ROOT/html ...

  7. 解决 .htaccess 导致的403禁止访问

    如果启用了mod_rewrite, 那么Options就一定要启用FollowSymLinks或者SymLinksifOwnerMatch, 否则会出现Fobidden页面禁止访问的错误. 于是把 O ...

  8. CSS3主要的几个样式笔记

    1.边框:border-color:    设置对象边框的颜色.     使用CSS3的border-radius属性,如果你设置了border的宽度是X px,那么你就可以在这个border上使用X ...

  9. VMware8安装配置Win7、CentOS-7向导

    1.宿主电脑配置情况 Windows 8.1 中文版 Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz 2.4GHz RAM: 8G Type: 64 bit 2.软件 ...

  10. 乱侃OOD

    接口代表的就是共同性,所谓面向接口编程,就是要抽象各种不同概念的共同点 然后把这些概念的不同点用具体的类包装起来,这样一看,面向接口编程就等于面向对象编程 其实说白了是一个概念 IOC就是要把对细节的 ...