高并发编程初步印象

【前言】

之后的技术方向应该是大数据量和高并发场景下的编程,分别对应大量数据的存储查询计算,超高请求的多线程处理,这才是以后的技术发展方向。当然是在能完成基础业务的前提下,增删改查数据转换SSM这些。现在项目的用户数上来了,经常出现,在公司测试好好的,一发布到现网,就会出各种性能瓶颈,请求超时,数据库连接超时,甚至部件奔溃。所以不光是高并发的编程,更需要高并发场景下的测试,像公司基本都是功能测试,性能测试很少,测试不充分,肯定会出问题。

好了,废话就不多说了,记录下学习经验。

【正文】

高并发主要包括:线程安全,线程封闭,线程调度,同步容器,并发容器,AQS,J.U.C等等

一般解决高并发问题,主要采取手段:扩容,缓存,队列,拆分,服务降级与熔断,数据库切库,分库分表等等

说下这些在项目组的应用吧。扩容,基本所有部件都经历过 单机-双击-集群;缓存,主要是在用户订购关系这块用的redis+持久化;服务降级,是给接口加了线程锁,频率1tips;分库分表,基本都会有用户库系统库的概念,用户表这种几百w的大表,根据ID首字母拆成10个表。

高并发无非是为了保证你的线程是安全的,不会出现线程传输的数据和最后入库的不一致。

线程安全主要包括:

线程安全性:原子性,可见性,有序性,atomic包,CAS算法,synchronized和lock,volatile,happes-before

安全发布对象:安全发布方法,不可变对象,final关键字使用,不可变方法,线程不安全类与写法

线程封闭:堆栈封闭,threadLocal线程封闭,JDBC的线程封闭,同步容器,并发容器,J.U.C

AQS和J.U.C组件:CountDownLatch,CyclicBarrier,Semaphore

原文地址:https://www.cnblogs.com/likailun/p/8934403.html

时间: 2024-11-06 23:10:23

高并发编程初步印象的相关文章

Java高并发编程(一)

1.原子量级操作(读.++操作.写分为最小的操作量单位,在多线程中进行原子量级编程保证程序可见性(有序性人为规定)) 由于某些问题在多线程条件下:产生了竞争的问题,(例如:在多线程中一个简单的计数器增加)如果在程序中不采用同步的机制,那么在程序的运行结果中,多个线程在访问此资源时候,产生Racing.解决这个问题,采用某种方式阻止其他线程在该线程使用该变量的时候使用该变量 采用原子级操作:1.采用加锁的机制(最好的操作)2.Java.concurrent.atomic包包含一些原子量操作:Ato

高并发编程必备基础 -- 转载自 并发编程网

文章转载自 并发编程网  本文链接地址:高并发编程必备基础 一. 前言 借用Java并发编程实践中的话"编写正确的程序并不容易,而编写正常的并发程序就更难了",相比于顺序执行的情况,多线程的线程安全问题是微妙而且出乎意料的,因为在没有进行适当同步的情况下多线程中各个操作的顺序是不可预期的,本文算是对多线程情况下同步策略的一个简单介绍. 二. 什么是线程安全问题 线程安全问题是指当多个线程同时读写一个状态变量,并且没有任何同步措施时候,导致脏数据或者其他不可预见的结果的问题.Java中首

高并发编程专题说明

大家好,并发编程是一个提升程序员level的关键专题,本专题会从理论结合实践逐步深入,尽量用通俗的语言和跑的通的程序来给大家讲解,重点每个地方都会形成一个闭环,让大家真正掌握高并发编程的核心要点,让我们一起来学习,感受技术的乐趣. 对该专题感兴趣的,欢迎点赞!!! 最后给大家一个经验之谈,要提升自己的技术逼格,一句话,"不断走出自己的舒适区" 技术说明:本专题会以java作为编程语言,要求大家具备javase的基础知识,如果不具备就需要先掌握这部分知识再来看这个专题了. 原文地址:ht

Java 面试知识点解析(二)——高并发编程篇

前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大部分内容参照自这一篇文章,有一些自己补充的,也算是重新学习一下 Java 吧. 前序文章链接: Java 面试知识点解析(一)--基础知识篇 (一)高并发编程基础知识 这里涉及到一些基础的概念,我重新捧起了一下<实战 Java 高并发程序设计>这一本书,感觉到心潮澎湃,这或许就是笔者叙述功底扎实的

高并发编程之线程安全与内存模型

微信公众号:Java修炼指南关注可与各位开发者共同探讨学习经验,以及进阶经验.如果有什么问题或建议,请在公众号留言.博客:https://home.cnblogs.com/u/wuyx/ 前几期简单介绍了一些线程方面的基础知识,以及一些线程的一些基础用法(想看往期文章的小伙伴可以直接拉到文章最下方飞速前往).本文通过java内存模型来介绍线程之间不可见的原因. 本期精彩原子性有序性指令重排序可见性Happen-Before规则 原子性 原子性对于我们开发者来说应该算是比较熟悉的了,通俗点说就是执

高并发编程之无锁

前几期简单介绍了一些线程方面的基础知识,以及一些线程的一些基础用法以及通过jvm内存模型的方式去介绍了一些并发中常见的问题(想看往期文章的小伙伴可以直接拉到文章最下方飞速前往).本文重点介绍一个概念“无锁” 本期精彩什么是无锁无锁类的原理AtomicIntegerUnsafeAtomicReferenceAtomicStampedReference 什么是无锁 在高并发编程中最重要的就是获取临界区资源,保证其中操作的原子性.一般来说使用synchronized关键字进行加锁,但是这种操作方式其实

[记录]Python高并发编程

========== ==多进程== ========== 要让Python程序实现多进程(multiprocessing),我们先了解操作系统的相关知识. Unix/Linux操作系统提供了一个fork()系统调用,它非常特殊.普通的函数调用,调用一次,返回一次,但是fork()调用一次,返回两次,因为操作系统自动把当前进程(称为父进程)复制了一份(称为子进程),然后,分别在父进程和子进程内返回. 子进程永远返回0,而父进程返回子进程的ID.这样做的理由是,一个父进程可以fork出很多子进程,

java高并发编程(五)线程池

摘自马士兵java并发编程 一.认识Executor.ExecutorService.Callable.Executors /** * 认识Executor */ package yxxy.c_026; import java.util.concurrent.Executor; public class T01_MyExecutor implements Executor { public static void main(String[] args) { new T01_MyExecutor(

一文让你读懂高并发编程的意义及其好处和注意事项

由于多核多线程的CPU的诞生,多线程.高并发的编程越来越受重视和关注.多线程可以给程序带来如下好处.(1)充分利用CPU的资源从上面的CPU的介绍,可以看的出来,现在市面上没有CPU的内核不使用多线程并发制的,特别是服务器还不止一个CPU,如果还是使用单线程的技术做思路,明显就out了.因为程序的基本调度单元是线程,并且一个线程也只能在一个CPU的一个核的一个线程跑,如果你是一个i3的CPU的话,最差也是双核心4线程的运算能力:如果是一个线程的程序的话,那是要浪费3/4的CPU性能:如果设计一个