16.同步类容器Collections.synchronized
voctor动态数组、同步类容器,底层实现基于:Collections.synchronized
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
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
16.同步类容器Collections.synchronized的更多相关文章
- Java线程同步类容器和并发容器(四)
同步类容器都是线程安全的,在某些场景下,需要枷锁保护符合操作,最经典ConcurrentModifiicationException,原因是当容器迭代的过程中,被并发的修改了内容. for (Iter ...
- 同步类容器和并发类容器——ConcurrentMap、CopyOnWrite、Queue
一 同步类容器同步类容器都是线程安全的,但在某些场景中可能需要加锁来保证复合操作. 符合操作如:迭代(反复访问元素,遍历完容器中所有元素).跳转(根据指定的顺序找到当前元素的下一个元素).条件运算. ...
- 15.同步类容器Vector
同步类容器1 1.线程都是安全的. 2.在某些场景下需要加锁来保护“复合操作” a.迭代:反复去访问元素.遍历完容器所有的元素 b.跳转:根据下标制定去访问查找元素 c.条件运算 3.复合操作在多线程 ...
- JUC源码分析-集合篇:并发类容器介绍
JUC源码分析-集合篇:并发类容器介绍 同步类容器是 线程安全 的,如 Vector.HashTable 等容器的同步功能都是由 Collections.synchronizedMap 等工厂方法去创 ...
- 并发编程(二)------并发类容器ConcurrentMap
并发类容器: jdk5.0以后提供了多种并发类容器来替代同步类容器从而改善性能. 同步类容器的状态都是串行化的. 他们虽然实现了线程安全,但是严重降低了并发性,在多线程环境时,严重降低了应用程序的吞吐 ...
- 深入理解Java中的同步静态方法和synchronized(class)代码块的类锁
一.回顾学习内容 在前面几篇博客中我我们已经理解了synchronized对象锁.对象锁的重入.synchronized方法块.synchronized非本对象的代码块, 链接:https://www ...
- LinkedHashSet、Map、Map接口HashMap、Hashtable,TreeSet、TreeMap、如何选择使用集合实现类,Collections工具类
一.Set接口实现类LinkedHashSet 实现继承图: 1.LinkedHashSet的全面说明 1) LinkedHashSet是 HashSet的子类 2) LinkedHashSet底层是 ...
- 操作集合的工具类:Collections
Java提供了一个操作Set.List和Map等集合的工具类:Collections,该工具类提供了大量方法对集合进行排序.查询和修改等操作,还提供了将集合对象置为不可变.对集合对象实现同步控制等方法 ...
- java两种同步机制的实现 synchronized和reentrantlock
java两种同步机制的实现 synchronized和reentrantlock 双11加保障过去一周,趁现在有空,写一点硬货,因为在进入阿里之后工作域的原因之前很多java知识点很少用,所以记录一下 ...
随机推荐
- echarts3.0版本断点连线的处理
项目应用到echarts图表组件.官网的demo中出现空数据会断开.经过跟踪调试.修改echarts.js以下代码即可实现断点连线功能(需要将空数据处理成'-'.这样才能均值): for (var ...
- jQuery为多个元素绑定同一个事件
$('.toals,input[type=datetime]').on('focus',function(){ $('.footer-focus-none').css('display','none' ...
- How To Install Nginx on Ubuntu 16.04 zz
Introduction Nginx is one of the most popular web servers in the world and is responsible for hostin ...
- Integer to Roman——相当于查表法
Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 t ...
- vs2005 QT4.7.1编译 详细
http://blog.csdn.net/debugconsole/article/details/8230683 网上一搜有QT+2005编译的很多文章,但是都不详细,很多都编不过,特别的在conf ...
- 【转载】万能adapter
adapter总是自己写,其实使用现成的框架会节省不少代码 原文地址:https://github.com/hongyangAndroid/baseAdapter base-adapter Andro ...
- HZAU 1199 Little Red Riding Hood(DP)
Little Red Riding Hood Time Limit: 1 Sec Memory Limit: 1280 MBSubmit: 853 Solved: 129[Submit][Stat ...
- Linux命令之ftp
ftp [-pinegvd] [host] pftp [-inegvd] [host] 用户通过ftp这个程序来使用Internet上的标准文件传输协议(FTP).本程序允许用户向远端网站发送文件,或 ...
- 连接LilyPad之Windows平台的驱动
连接LilyPad之Windows平台的驱动 LilyPad和其他的Arduino控制板的不同之处是它是为电子织物和可穿戴设计的.那么,它的大小就必须要紧凑.所以,它并没有板载其他大多数板子都具有的U ...
- Hive 默认分区
在hive里面表可以创建成分区表,但是当分区字段的值是'' 或者 null时 hive会自动将分区命名为默认分区名称. 默认情况下,默认分区的名称为__HIVE_DEFAULT_PARTITION__ ...