`

同步容器和并发容器1

 
阅读更多
package com.bjsxt.base.coll012;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Vector;

/**
 * 多线程使用Vector或者HashTable的示例(简单线程同步问题)
 * @author alienware
 * 二、线程安全(Thread-safe)的集合对象:
Vector 线程安全:
HashTable 线程安全:
StringBuffer 线程安全:
三、非线程安全的集合对象:
ArrayList :
LinkedList:
HashMap:
HashSet:
TreeMap:
TreeSet:
StringBulider:

3 非线程安全的集合 可以通过 Collections.synchronizedXXX(?) 方法来使不是线程安全的变成线程安全,但是源码只是简单的使用 synchronize 
   进行同步,影响效率,所以JDK1.5之后出现并发类容器。;
 */
/*
 * 如果不是线程安全的结合出现复合型的操作会报错:
 * Exception in thread "线程10" java.util.ConcurrentModificationException
	at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:859)
	at java.util.ArrayList$Itr.next(ArrayList.java:831)
	at com.bjsxt.base.coll012.Tickets$1.run(Tickets.java:51)
	
	修改成线程安全的集合就没这个问题
 * 
 * */
public class Tickets {

	public static void main(String[] args) {
		//初始化火车票池并添加火车票:避免线程同步可采用Vector替代ArrayList  HashTable替代HashMap
		
		final Vector<String> tickets = new Vector<String>();
		//同步
		Map<String, String> map = Collections.synchronizedMap(new HashMap<String, String>());

		for(int i = 1; i<= 1000; i++){
			tickets.add("火车票"+i);
		}
		
//		for (Iterator iterator = tickets.iterator(); iterator.hasNext();) {
//			String string = (String) iterator.next();
//			tickets.remove(20);
//		}
		
		for(int i = 1; i <=10; i ++){
			new Thread("线程"+i){
				public void run(){
					for (Iterator iterator = tickets.iterator(); iterator.hasNext();) {
						String string = (String) iterator.next();
						try {
							Thread.sleep(1000);
						} catch (InterruptedException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
						//tickets.remove(20);
					}
				}
			}.start();
			new Thread("线程"+i){
				public void run(){
					while(true){
						if(tickets.isEmpty()) break;
						try {
							Thread.sleep(1000);
						} catch (InterruptedException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
						System.out.println(Thread.currentThread().getName() + "---" + 	tickets.add("火车票"));
					}
				}
			}.start();
			
		}
	}
}

 

分享到:
评论

相关推荐

    Java从同步容器到并发容器的操作过程

    Java中的同步容器与并发容器是处理多线程环境下数据安全的重要工具。同步容器,如`Vector`和`HashTable`,通过在每个方法上添加`synchronized`关键字实现了线程安全,但这种方式存在性能瓶颈,因为每次操作都需要...

    Java同步容器和并发容器详解

    Java同步容器和并发容器详解 Java同步容器和并发容器是Java基础类库中使用频率最高的一部分,Java集合包中提供了大量的容器类来帮组我们简化开发。下面我们来一起学习Java同步容器和并发容器的知识点。 一、同步...

    并发容器的原理,7大并发容器详解、及使用场景

    并发容器的出现解决了传统同步容器在性能上的不足,通过引入更先进的并发控制策略,如锁分段、CAS算法等,提升了程序的并发性和吞吐量。 首先,我们要理解什么是同步容器。Java 集合框架中的非线程安全容器,如 ...

    Java并发:同步容器&并发容器

    Java并发编程中,同步容器和并发容器是两种关键的线程安全数据结构。同步容器,如Vector和Hashtable,是通过内置的`synchronized`关键字来确保线程安全的。这意味着当多个线程尝试访问同步容器的方法时,它们会被...

    TBB并发容器 学习笔记

    相比于传统的STL容器,TBB并发容器的优势在于它们在设计时考虑了多线程环境,不需要程序员手动添加锁或其他同步机制。这减少了潜在的死锁和竞态条件的风险,提高了代码的可读性和可维护性。然而,值得注意的是,虽然...

    Java并发编程:同步容器

    为了方便编写出线程安全的程序,Java里面提供了一些线程安全类和并发工具,比如:同步容器、并发容器、阻塞队列、Synchronizer(比如CountDownLatch)。我们来讨论下同步容器。  一.为什么会出现同步容器?  在...

    java并发容器CopyOnWriteArrayList实现原理及源码分析

    Java并发容器CopyOnWriteArrayList实现原理及源码分析 Java并发容器...CopyOnWriteArrayList容器是一种高性能的并发容器,特别适用于读多写少的并发场景,但是需要注意其内存占用问题和实时性问题。

    Java并发编程-并发容器1

    【Java并发编程-并发容器1】 在Java的并发编程中,容器的线程安全是至关重要的。HashMap在多线程环境下可能导致CPU利用率极高,因为它不是线程安全的。HashTable虽然提供了线程安全,但其同步机制导致并发性能较低。...

    JAVA并发容器代码随读1

    在`java.util.concurrent`包中,有四种主要的并发容器类型:队列(BlockingQueue)、Map(ConcurrentMap)、Set(ConcurrentSkipListSet和CopyOnWriteArraySet)以及List(CopyOnWriteArrayList)。这些容器的设计...

    09、并发容器(Map、List、Set)实战及其原理

    1. **并发容器概述**: 在并发编程中,数据共享和线程安全是核心问题。Java提供了一些线程安全的容器,如`ConcurrentHashMap`、`CopyOnWriteArrayList`和`ConcurrentSkipListSet`,它们为开发者提供了高效且安全的...

    并发编程实践,全面介绍基础知识、JVM同步原语、线程安全、低级并发工具、线程安全容器、高级线程协作工具、Executor部分等

    - **并发容器**:如ArrayList、HashMap的并发版本(CopyOnWriteArrayList、ConcurrentHashMap),设计为线程安全,但效率更高。 - **阻塞队列**:如ArrayBlockingQueue、LinkedBlockingQueue,提供生产者-消费者...

    并发容器和线程池,java并发编程3

    ### 并发容器和线程池 #### 一、并发容器 ##### 1.1 概述 在Java中,为了提高程序的并发处理能力,Java标准库提供了多个线程安全的并发容器,它们主要位于`java.util.concurrent`包中。这些容器能够有效地管理...

    免费超全面的Java基础类型,容器,并发,IO流,面向对象,Web编程等代码总结

    多线程并发访问,同步控制 线程间通信,等待/通知机制 锁锁机制,API详解 Fork/Join 框架机制详解 Executor线程池框架简介 面向对象 泛型机制与反射原理 Proxy动态代理机制详解 从整体上观察对象 网络开发 Servlet...

    Java高并发编程,构建并发编程知识体系,提升面试成功率

    本课程将结合大量图示及代码演示,带你掌握多线程并发编程(线程安全,线程调度,线程封闭,同步容器等)与高并发处理思路与手段(扩容,缓存,队列,拆分等),构建完整的并发与高并发知识体系,胜任实际开发中并发...

    (PDF带目录)《Java 并发编程实战》,java并发实战,并发

    Java平台提供了丰富的并发工具和API,如线程、同步机制、并发容器、并发工具类等,这些在《Java 并发编程实战》中都有详尽的阐述。 1. **线程与进程**:书中首先会介绍操作系统中的线程和进程概念,以及它们在Java...

    并发编程总结.xmind

    java并发编程总结,包括多线程安全机制分析总结,Unsafe源码分析总结,并发工具类总结,ThreadLocal原理和使用,Fork/Join框架使用总结,同步容器和并发容器源码分析

    java多线程和并发.pdf

    在Java并发编程中,还涉及到多种并发工具类,例如同步容器类和并发容器类。同步容器类使用同步锁来保证线程安全,但可能会影响性能。并发容器类ConcurrentHashMap和CopyOnWriteArrayList等,采用细粒度的锁和弱一致...

    java 并发学习总结

    1. **并发容器**:Java提供了一系列的并发容器,如`ConcurrentHashMap`,它在并发环境下提供了高效且线程安全的映射操作。与`Hashtable`不同,`ConcurrentHashMap`不是通过全局锁来实现同步,而是采用分段锁策略,...

    java并发编程内部分享PPT

    总的来说,这份“java并发编程内部分享PPT”涵盖了Java并发编程的多个重要方面,包括线程创建与管理、同步机制、并发容器、线程池、并发问题以及异步计算。通过深入学习和实践这些知识点,开发者可以更好地应对多...

    基于C++的线程安全容器。.zip

    总之,基于C++的线程安全容器是并发编程中的一个重要主题,它涉及到多线程编程的基础知识,如同步机制和并发控制。通过实践这样的项目,学生不仅可以提升自己的编程能力,还能对并发编程有更深入的理解。

Global site tag (gtag.js) - Google Analytics