作者专注于Java、架构、Linux、小程序、爬虫、自动化等技术。 工作期间含泪整理出一些资料,微信搜索【javaUp】,回复 【java】【黑客】【爬虫】【小程序】【面试】等关键字免费获取资料。技术交流、项目合作可私聊。

前言

兄弟篇:Java——使用多线程模拟真实高并发业务并保证安全性(二)

一、需求

使用100个线程往list中添加10000条数据,要求保证安全性,并正确记录数量。

二、实现

在看下面的代码之前,读者朋友可以自己先试一试怎么实现上面的需求,然后跟本文的实现方式对比一下。

2.1 使用技术

可重入锁ReentrantReadWriteLock,这里没有使用到CopyOnWriteArrayList,因为ReentrantReadWriteLock已经起到了CopyOnWriteArrayList对容器add的安全性的同等作用,另外还有对num++的保护。

2.2 实现代码

package com.han.test;import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;public class TestMultiThread {static List<Integer> list = new ArrayList<Integer>();static ReadWriteLock readWriteLock = new ReentrantReadWriteLock();static int num = 0;static Random random = new Random();public static void main(String[] args) {// 使用100个线程模拟业务,可以根据需要增加或者减少线程数量for (int i = 0; i < 100; i++) {new Thread() {@Overridepublic void run() {try {dosomething();} catch (InterruptedException e) {e.printStackTrace();}};}.start();}}public static void dosomething() throws InterruptedException {// 设置每个线程最多处理100个数据int max = 100;// 使用10000作为测试范围,可以根据需要设置数量for (int i = 0; list.size() < 10000; i++) {if (max <= 0) {break;}readWriteLock.writeLock().lock();if (!list.contains(i)) {Thread.sleep(random.nextInt(5));list.add(i);num++;max--;System.out.println(Thread.currentThread().getName() + "***添加了" + num + "个,list数量:" + list.size());}readWriteLock.writeLock().unlock();}}}

Java——使用多线程模拟真实高并发业务并保证安全性(一)相关推荐

  1. Java Web(1)高并发业务

    互联网无时无刻不面对着高并发问题,例如商品秒杀.微信群抢红包.大麦网抢演唱会门票等. 当一个Web系统,在一秒内收到数以万计甚至更多的请求时,系统的优化和稳定是至关重要的. 互联网的开发包括Java后 ...

  2. java基础多线程抢红包_高并发开发-微信抢红包实现

    - 如果上司给一个任务,让我们在实现微信抢红包这个功能,我们该怎么做? * 业务思考,实现方式千百种,不追求方法复制,只追求推导过程的思考总结 * 功能点探索 * 新建红包:在DB.cache各新增一 ...

  3. oracle rac 高并发性能_高并发业务下 JVM 涉及的垃圾回收与性能问题分析与定位...

    最近好多 Java 的朋友问:"高并发业务场景下,JVM涉及的性能问题好难搞呀--".看来是大家的技术经验相对少了些,拿不准该从哪些地方上手,其实,每个技术人要该懂得怎样更好打造自 ...

  4. Java多线程学习处理高并发问题

    在程序的应用程序中,用户或请求的数量达到一定数量,并且无法避免并发请求.由于对接口的每次调用都必须在返回时终止,因此,如果接口的业务相对复杂,则可能会有多个用户.调用接口时,该用户将冻结. 以下内容将 ...

  5. java架构师眼中的高并发架构

    前言 高并发经常会发生在有大活跃用户量,用户高聚集的业务场景中,如:秒杀活动,定时领取红包等. 为了让业务可以流畅的运行并且给用户一个好的交互体验,我们需要根据业务场景预估达到的并发量等因素,来设计适 ...

  6. 如何处理高并发业务场景

    要具备高并发的经验确实需要有实际项目,因为业务逻辑其实很容易理清,但是要在高并发的情况下如何找到业务繁忙的热点并进行优化,完全只能凭经验. 假如没有靠谱的公司,接触不到高并发的业务场景怎么办? 从处理 ...

  7. Java面试中常见的高并发解决方案

    Java面试中常见的高并发解决方案 一般来讲,提高系统应对高并发能力的解决方案可以从以下几个方面入手: (1)高性能服务器 (2)高性能数据库 (3)高效编程语言 (4)高性能web容器 提高数据库性 ...

  8. Java生鲜电商平台-高并发核心技术订单与库存实战

    Java生鲜电商平台-高并发核心技术订单与库存实战 一. 问题 一件商品只有100个库存,现在有1000或者更多的用户来购买,每个用户计划同时购买1个到几个不等商品. 如何保证库存在高并发的场景下是安 ...

  9. 线程基础,多线程架构,高并发,线程安全基础知识

    线程基础,多线程架构,高并发,线程安全基础知识 线程基础 一.线程安全 1.1概念:当多个线程访问某一个类(对象或者方法)时,这个类始终都能表现出正确额行为,那么这个类(对象或者方法)就是线程安全的. ...

最新文章

  1. System.Web.Caching.Cache类 缓存 各种缓存依赖
  2. ODBC的多线程应用
  3. 关于 mldonkey 的一些讨论和设置
  4. getpwnam学习
  5. AHOI2005航线规划 bzoj1969(LCT缩点)
  6. python 系统学习笔记(十二)---os os.path os.walk
  7. ubuntu安装python_常用linux指令 ubuntu环境pytorch配置
  8. 六个超大规模Hadoop(前景)
  9. PTA—考试座位号(C语言)
  10. [转] Spring XML配置十二个最佳实践
  11. Elastic-Job-Lite分析——作业调度器 JobScheduler 的创建过程
  12. [Yii Framework] (转)CComponent基础类
  13. 神经网络不胜语__M-P模型似可寻
  14. 升级AndroidX appcompat 1.2+版本导致多语言切换失败解决方案及问题分析
  15. 单片机原理及其应用试题(含答案)
  16. PCL入门系列 —— 加载obj格式mesh模型、点云数据并作纹理模型TextureMesh可视化
  17. win7计算机远程桌面连接,Win 7连向Win7系统远程桌面连接设置
  18. linux的ioctl函数实现
  19. C语言实现模拟银行存取款管理系统课程设计(纯C语言版)
  20. Weights Biases (一)

热门文章

  1. excel中使用VBA如何统计数据区域最后一行行号?
  2. 王者荣耀服务器维护多久结束,王者荣耀健康系统重置时间 时间限制规则详解...
  3. Pytorch3D_上手学习3D的AI模型
  4. 阅读论文《Deep Bilateral Learning for Real-Time Image Enhancement》
  5. 程序员的自我进化:学习之道,如何更有效的学习
  6. yaourt下载速度太慢_加快Yaourt软件包的安装速度
  7. 深信服python面试题_深信服软件测试面试经验
  8. win10下docker部署nginx+node+mongodb+redis学习
  9. 2017杭州云栖大会 智能客服专场预热 — 用心服务客户,用云助力客服
  10. Python直角坐标系画图