voctor动态数组、同步类容器,底层实现基于:Collections.synchronized

package demo5;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Vector;

/**
* Created by liudan on 2017/7/9.
*/
public class MyThread2 extends Thread {
/*同步类容器、动态数组*/
public static void main(String[] args) {
/*final Vector<String> ticksts = new Vector<>();*/

List<String> ticksts = Collections.synchronizedList(new ArrayList<String>());

for (int i = 1; i <= 100; i++) {
ticksts.add("G1001-火车票-G000X" + i);
}

for (int i = 1; i <= 10; i++) {
new Thread("线程" + i) {
@Override
public void run() {
while (true) {
if (ticksts.isEmpty()) break;
System.err.println(Thread.currentThread().getName() + "\t" + ticksts.remove(0));
}
}
}.start();
}

}
}
输出:
线程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

x
 
1
package demo5;
2

3
import java.util.ArrayList;
4
import java.util.Collections;
5
import java.util.List;
6
import java.util.Vector;
7

8
/**
9
 * Created by liudan on 2017/7/9.
10
 */
11
public class MyThread2 extends Thread {
12
    /*同步类容器、动态数组*/
13
    public static void main(String[] args) {
14
        /*final Vector<String> ticksts = new Vector<>();*/
15

16
        List<String> ticksts = Collections.synchronizedList(new ArrayList<String>());
17

18

19
        for (int i = 1; i <= 100; i++) {
20
            ticksts.add("G1001-火车票-G000X" + i);
21
        }
22

23

24
        for (int i = 1; i <= 10; i++) {
25
            new Thread("线程" + i) {
26
                @Override
27
                public void run() {
28
                    while (true) {
29
                        if (ticksts.isEmpty()) break;
30
                        System.err.println(Thread.currentThread().getName() + "\t" + ticksts.remove(0));
31
                    }
32
                }
33
            }.start();
34
        }
35

36
    }
37
}
38
输出:
39
线程001   G1001-火车票-G000X1
40
线程001   G1001-火车票-G000X2
41
线程001   G1001-火车票-G000X3
42
线程001   G1001-火车票-G000X4
43
线程002   G1001-火车票-G000X5
44
线程002   G1001-火车票-G000X7
45
线程001   G1001-火车票-G000X6
46
线程001   G1001-火车票-G000X9
47
线程001   G1001-火车票-G000X10
48
线程002   G1001-火车票-G000X8

16.同步类容器Collections.synchronized的更多相关文章

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

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

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

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

  3. 15.同步类容器Vector

    同步类容器1 1.线程都是安全的. 2.在某些场景下需要加锁来保护“复合操作” a.迭代:反复去访问元素.遍历完容器所有的元素 b.跳转:根据下标制定去访问查找元素 c.条件运算 3.复合操作在多线程 ...

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

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

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

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

  6. 深入理解Java中的同步静态方法和synchronized(class)代码块的类锁

    一.回顾学习内容 在前面几篇博客中我我们已经理解了synchronized对象锁.对象锁的重入.synchronized方法块.synchronized非本对象的代码块, 链接:https://www ...

  7. LinkedHashSet、Map、Map接口HashMap、Hashtable,TreeSet、TreeMap、如何选择使用集合实现类,Collections工具类

    一.Set接口实现类LinkedHashSet 实现继承图: 1.LinkedHashSet的全面说明 1) LinkedHashSet是 HashSet的子类 2) LinkedHashSet底层是 ...

  8. 操作集合的工具类:Collections

    Java提供了一个操作Set.List和Map等集合的工具类:Collections,该工具类提供了大量方法对集合进行排序.查询和修改等操作,还提供了将集合对象置为不可变.对集合对象实现同步控制等方法 ...

  9. java两种同步机制的实现 synchronized和reentrantlock

    java两种同步机制的实现 synchronized和reentrantlock 双11加保障过去一周,趁现在有空,写一点硬货,因为在进入阿里之后工作域的原因之前很多java知识点很少用,所以记录一下 ...

随机推荐

  1. 【总结】IE和Firefox的Javascript兼容性总结

    长久以来JavaScript兼容性一直是Web开发者的一个主要问题.在正式规范.事实标准以及各种实现之间的存在的差异让许多开发者日夜煎熬.为此,主要从以下几方面差异总结IE和Firefox的Javas ...

  2. python_day5学习笔记

    一.正则表达式 字符: \d 匹配任何十进制数:相当于类[0-9] \D 匹配任何非数字字符:相当于类[^0-9] \s  匹配任何空白字符:相当于类[  \t\n\r\f\v] \S  匹配任何非空 ...

  3. [PAT] 1146 Topological Order(25 分)

    This is a problem given in the Graduate Entrance Exam in 2018: Which of the following is NOT a topol ...

  4. Disruptor Ringbuffer

    系列译文: http://ifeve.com/disruptor/ 当有多个消费者时,(按Disruptor的设计)每个消费者各自控制自己的指针,依次读取每个Slot(也就是每个消费者都会读取到所有的 ...

  5. ES6的新增数据类型:Symbol

    简介:Symbol类型是es6新增的一个数据类型,Es5的基本数据类型(undefined,null,Object,function,Number,string) Symbol值通过Symbol函数生 ...

  6. python 函数内置方法short_desc

    1. 给函数设置一个文本 def action_checked(self, request): pass action_checked.short_desc = "签到" # sh ...

  7. hdu 1024(滚动数组+动态规划)

    Max Sum Plus Plus Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  8. WordPress匿名投稿插件:DX-Contribute(WP我要投稿,我要爆料)

    倡萌在<WordPress添加投稿功能(无需注册/可邮件通知站长和投稿人) >中分享过,通过修改主题文件实现游客快捷投稿的功能,但是有部分同学就是不太会动手,那么今天就分享一个WordPr ...

  9. 洛谷P2168 [NOI2015] 荷马史诗 [哈夫曼树]

    题目传送门 荷马史诗 Description 追逐影子的人,自己就是影子. ——荷马 Allison 最近迷上了文学.她喜欢在一个慵懒的午后,细细地品上一杯卡布奇诺,静静地阅读她爱不释手的<荷马 ...

  10. 洛谷P2280 [HNOI2003] 激光炸弹 [前缀和]

    题目传送门 题目描述 输入输出格式 输入格式: 输入文件名为input.txt 输入文件的第一行为正整数n和正整数R,接下来的n行每行有3个正整数,分别表示 xi,yi ,vi . 输出格式: 输出文 ...