package concurrencyTest;
import java.util.Iterator;
import java.util.concurrent.ConcurrentHashMap;
public class ConcurrencyTest2 {
public static Object mutex = new Object() ;
/**
* @param args
*/
public static void main(String[] args) {
ConcurrentHashMap<Integer, Integer> map = new ConcurrentHashMap<Integer, Integer>() ;
for(int i=0;i<100000 ; i++)
map.put(i, i+111111) ;
long start = System.currentTimeMillis() ;
Thread t1 = new Thread(new Producer(map)) ;
Thread t2 = new Thread(new Consumer(map)) ;
try {
Thread.sleep(200) ;
t1.start();
t2.start();
t1.join() ;
t2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Read last : " + (System.currentTimeMillis() - start) + " ms" + " shareMap : " + map.size());
}
}
class Producer implements Runnable {
ConcurrentHashMap<Integer, Integer> sharemap ;
int num = 0 ;
public static volatile boolean end = false;
public Producer(ConcurrentHashMap<Integer, Integer> map) {
sharemap = map ;
}
@Override
public void run() {
try {
int i =50000 ;
while(i<1000000) {
add(i) ;
i++ ;
if(i==120000)
Thread.sleep(1000) ;
}
end = true ;
System.out.println(Thread.currentThread().getName() + " add " + (i - 50000) + " elements! ShareMap size: " + sharemap.size() );
} catch (Exception e) {
e.printStackTrace() ;
}
}
public void add(int item) {
synchronized (ConcurrencyTest2.mutex) {
if(!sharemap.containsKey(item)) {
sharemap.putIfAbsent(item, item + 111111) ;
} else {
sharemap.put(item, sharemap.get(item) + 222222) ;
}
}
}
}
class Consumer implements Runnable {
ConcurrentHashMap<Integer, Integer> sharemap ;
int num = 0 ;
public Consumer(ConcurrentHashMap<Integer, Integer> map) {
sharemap = map ;
it = sharemap.values().iterator();
}
@Override
public void run() {
Integer i = poll();
while(!Producer.end) {
if((i = poll())!=null) {
num++ ;
} else {
it = sharemap.values().iterator();
System.out.println("wait poll num: " + num + " ShareMap size: "+ sharemap.size());
}
}
System.out.println(Thread.currentThread().getName() + " poll " + num + " elements! ShareMap size: " + sharemap.size() );
}
Iterator<Integer> it;
public Integer poll() {
synchronized (ConcurrencyTest2.mutex) {
if (sharemap.size() > 0 && it!=null && it.hasNext()) {
Integer m = it.next();
it.remove();
return m;
} else {
return null;
}
}
}
}
一边生产,一边消费,性能不佳啊!
分享到:
相关推荐
编写正确的程序很难,而编写正确的并发程序则难上加难。与串行程序相比,在并发程序中...同时在当今互联网的时代,大量的互联网应用都面对着海量的访问请求,因此,并发编程在我们的应用中成为越来越不可或缺的一部分。
操作系统实验一 多进程并发执行的实验报告的代码
在这个代码示例中,可能的场景是,抽象工厂创建任务对象,并将这些任务放入一个并发队列中。然后,多个工作线程可以从队列中取出任务进行执行。这种方式可以有效地利用多核处理器的并行计算能力,提高程序的运行效率...
linux下完整的epoll多线程高并发服务器代码
本练习集专注于提升你在Java并发编程中的技巧,通过一系列逐步进阶的代码实例,帮助你掌握从基础到高级的并发概念。 首先,我们从“线程安全”开始。线程安全是指在多线程环境下,一个类或方法能够正确地处理并发...
"有趣的Go代码的语料库"是一个集合,包含了各种创新和巧妙的Go语言编程示例,旨在帮助开发者拓宽视野,提升Go编程技巧。 这个语料库可能包括了各种不同的Go代码片段,涵盖了诸如错误处理、类型系统、反射...
Java高并发编程是现代软件开发中的重要组成部分,特别是在构建大规模、高性能的应用系统时,如分布式服务、实时聊天、在线游戏等。Netty是一款强大的、高性能的网络应用框架,它基于Java NIO(非阻塞I/O)设计,为...
Java 高并发多线程编程系列案例代码 & 教程 & 面试题集锦! !! 包括但不限于线程安全性, atomic包下相关类、CAS原理、Unsafe类、synchronized关键字等的使用及注意事项,
Java高并发学习代码
Visual C++源代码 147 如何处理多用户更新数据并发问题Visual C++源代码 147 如何处理多用户更新数据并发问题Visual C++源代码 147 如何处理多用户更新数据并发问题Visual C++源代码 147 如何处理多用户更新数据并发...
在这个"Go并发编程实践V2"的课程中,我们将深入探讨Go语言中的并发编程,并结合源代码来理解其工作原理。 并发编程是现代软件开发中的一个重要概念,它允许程序同时执行多个任务,从而提高系统的效率和响应性。Go...
《Java并发编程实战》是Java并发编程领域的一本经典著作,它深入浅出地介绍了如何在Java平台上进行高效的多线程编程。这本书的源码提供了丰富的示例,可以帮助读者更好地理解书中的理论知识并将其应用到实际项目中。...
《Java 7并发编程实战手册》是一本深入探讨Java并发编程的权威著作,它涵盖了大量实用的技巧和最佳实践,旨在帮助开发者在多线程环境下编写高效、安全的代码。这本书的实例代码提供了丰富的示例,使读者能够直观地...
本文将围绕“Java高并发秒杀完整代码”这一主题,结合描述中提到的技术栈,如Spring、SpringMVC、MyBatis、Bootstrap、JavaScript、Redis以及MySQL和存储过程,来详细讲解如何构建一个能够应对大量并发请求的秒杀...
多线程并发代码的调试方法详解 在多线程并发编程中,调试是一件很复杂的事情,特别是在使用 IntelliJ IDEA 等集成开发环境时。今天,我们将详细介绍如何在 IntelliJ IDEA 中调试多线程并发代码。 在多线程并发编程...
c# 各种并发执行代码及性能分析,多线程
【尚硅谷】大厂必备技术之JUC并发编程视频 配套资料,自己根据视频整理 pdf 课件,和代码 视频地址:...
这个压缩包"Java并发编程代码.7z"很可能包含了一系列示例代码,用于演示和解释Java并发编程的关键概念和技术。下面我们将深入探讨Java并发编程的相关知识点。 1. **线程与进程**:在Java中,线程是程序执行的基本...
以下是对"并发编程代码"这一主题的详细解释: 1. **线程与进程**:在并发编程中,线程是程序执行的基本单元,而进程则是资源分配的基本单位。一个进程中可以有多个线程,它们共享同一内存空间,互相之间可以直接...
如有疑问,请结合博客:...本代码为演示并发所创,本代码为演示并发所创,本代码为演示并发所创,本代码为演示并发所创,本代码为演示并发所创,本代码为演示并发所创,本代码为演示并发所创,本代码为演示并发所创,