前言:
Java语言作用很大,因有众多分门杂类的开源框架导致Javaer关注高并发细节问题偏少,常常被面试或者面试的时候,别人总是问你current的包,但是却很少人会询问你,“这段代码在高并发的情况下,会出现问题?我们应该如何改写呢?”所以本篇博客我想从最简单的demo,到支持高并发场景的,如果觉得过程中有问题问大家赐教。
案例:
经典多线程并发问题就是生产者消费者问题,以下列子中,我会加入多种条件,而非一个纯种的生产者-消费者模式,可能很多人会觉得现在有了concurrent的PKG下的一大堆ArrayBlockQueue,但今天主题是如何优化改进。
demo,非安全的
public class UserAccount { private int balance; private long maxMoney = 5000000; private long minMOney = 1000000; public UserAccount(int balance) { this.balance = balance; } public void deposit(int amount) { while (balance + amount < maxMoney) { balance += amount; System.out.printf("存:" + balance); } } public void withdraw(int amount) { while (minMOney > balance - amount) { balance -= amount; System.out.println("取:" + balance); } } }
第一步: 上面的代码很明显会出现并发问题,简单点我们加入synchronized
public class UserAccount { private int balance; private long maxMoney = 90000000; private long minMOney = 1000000; public UserAccount(int balance) { this.balance = balance; } public synchronized void deposit(int amount) { // synchronized (this) { while (balance + amount < maxMoney) { balance += amount; System.out.println("存:" + balance); } } // } public synchronized void withdraw(int amount) { while (minMOney > balance - amount) { balance -= amount; System.out.println("取:" + balance); } } }第二步:有没有发现加入关键字synchronized后,是并发问题解决了,但是我们锁的范围太广了,不懂得可以看下synchronized的说明。(当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行)
相关推荐
秒杀项目代码:其中涉及高并发的处理其中使用了redis,rabbit MQ,页面静态化,分布式session,应用及的nginx的负载均衡
spring boot demo,整合netty5实现高并发websocket,并引入slf4g+lombok,采用maven形式; 直接导入运行,有测试页面也有实现代码及详细注释,src/main/webapps/TestNettyWebSocket.html里第十行改成 ws://localhost...
zxframe主要用于有高访问量的项目,对高并发瓶颈有成套成熟解决方案,让你的服务稳健可用 *.支持读写分离,分库分表,读数据源熔断,数据源运行监控 *.支持JPA,既有hibernate的便捷操作,又有mybatis的sql集中编写...
将聊天信息写到管道(pipe),并发送给父进程。 使用epoll机制接受服务端发来的信息,并显示给用户,使用户看到其他用户的聊天信息 运行效果 订阅客户端接受来自发布服务端的的内容示意图 运行环境 ubuntu 快速教程 ...
IOCP是一种支持高并发,高效率的网络通信技术。资源含有IOCP的Delphi控件和相应的Demo
电商项目范例,其中技术包括了fast-DFS分布式存储系统,异步框架,缓存实现,静态首页任务设置,支持订单高并发,商品搜索功能。
OBS通过智能调度,并结合传输加速、大数据垂直优化,为用户提供高并发、大带宽、稳定低时延的数据访问体验 易用 OBS支持REST API,提供多种语言的SDK,兼容主流的客户端工具,您可以随时随地通过网络上传、下载、...
集成iot,web api服务,这套带码是通过C#编写集成IOCP高性能高并发优势服务器服务源码。 带手机app测试demo源码 具体具备功能如下: 1、具备EF6+mssql数据库功能,可更改为MYSQL或SQLITe. 2、自带WEB API服务,抛弃...
多,逐步工人处理不过来,需要增加工人的时候,也非常简单,新加入的工人直接连接到经销商即可。因此,项目的可维护性大大提高。 3.各文件作用 broker.cpp :使用自带的zmq_poll来管理ZMQ_ROUTER和ZMQ_DEALER专有的...
scala是一种基于JVM的面向对象的函数编程,scala编程相对于java而言代码整洁、开发效率更高。 其中scala优点主要有: ...4:支持并发控制,Actor Model机制 5:目前比较流行的kafka,spark均由scala开发。
纯Go语言编写的高并发、分布式、重量级爬虫软件,支持单机、服务端、客户端三种运行模式,拥有Web、GUI、命令行三种操作界面;规则简单灵活、批量任务并发、输出方式丰富(mysql/mongodb/csv/excel等)、有大量Demo...
设定字符串为“张三,你好,我是李四” 产生张三的密钥对(keyPairZhang) 张三生成公钥(publicKeyZhang)并发送给李四,这里发送的是公钥的数组字节 通过网络或磁盘等方式,把公钥编码传送给李四,李四接收到张三编码后...
该项目目前公司系统正在使用,程序采用多线程模式运行,支持高并发,想着可能有同学会用到。
这对于开发需要高并发性能的应用程序(如服务器端应用、网络应用等)非常重要。 自动内存管理(垃圾回收): Java具有自动内存管理机制,通过垃圾回收器自动回收不再使用的对象,使得开发者不需要手动管理内存,...
它很容易让您从单用户,单数据库升级到企业级的应用,火鸟是提供许多 ANSI SQL 标准功能关系数据库,提供优秀的并发性、 高性能和对存储的过程和触发器的功能强大的语言支持。 firebird是一个十分小的开源数据库,...
pholcusPholcus(幽灵蛛)是一款Go语言编写的爬虫软件框架(含GUI界面),优雅的爬虫规则、可控的高并发、任意的批量任务、多种输出方式、大量Demo,并且考虑了支持分布式布局。安装幽灵蛛go get github....
设定字符串为“张三,你好,我是李四” 产生张三的密钥对(keyPairZhang) 张三生成公钥(publicKeyZhang)并发送给李四,这里发送的是公钥的数组字节 通过网络或磁盘等方式,把公钥编码传送给李四,李四接收到张三编码后...
程序采用Spring框架,简化了JDBC和RMI的样板式代码,并配置了Druid数据库连接池,同时,为了满足高并发的需求,采用了NIO框架Netty,更好地支持大量终端同时定位。程序已经Maven化。 github地址以及使用说明在压缩包...
这对于开发需要高并发性能的应用程序(如服务器端应用、网络应用等)非常重要。 自动内存管理(垃圾回收): Java具有自动内存管理机制,通过垃圾回收器自动回收不再使用的对象,使得开发者不需要手动管理内存,...
主要介绍了使用java的HttpClient实现多线程并发的相关资料,需要的朋友可以参考下