首页 > 其他分享 >synchronized解决并发问题实践

synchronized解决并发问题实践

时间:2023-10-08 13:56:11浏览次数:26  
标签:service synchronized 实践 public 并发 资料 上传 order

场景一:

 场景描述:会议下面可以同时上传多个会议资料,资料是有顺序的,也就是有序号order,上传后可以上下移动资料顺序,移动资料顺序是靠改变order来实现的,这就需要保证每个资料的顺序不能一样,上传一个资料调一次上传接口,同时上传10个资料会同时调10次上传接口。上传接口逻辑是先查当前会议最大的资料order,在这个基础上自增1作为当前资料的order,再将当前资料插入到数据库。

 代码:

controller:
@RestController
public class Controller {
 @Resource
    ServiceImpl service;
@RequestMapping(value ="concurrent", method = RequestMethod.POST)
    public  void concurrent() throws InterruptedException {
        System.out.println("模拟controller业务");
        service.fun1();
    }
}

service:
@Service
public class ServiceImpl {
    @Resource
    Dao dao;
    Object lock = new Object();
    public  void fun1() throws InterruptedException {
        System.out.println("模拟service层逻辑");
        int conferenceId=1;
        int order;
        synchronized(lock){ //如果去掉这个synchronized就会出现相同的order,因为可能第一个请求查出order是2,在这个请求还没执行将3插入时,
其他请求也查出2,就会插入两次3 //查询当前会议下最大的order order = Integer.valueOf(dao.selectOrderByid(conferenceId)); Thread.sleep(100); order++; System.out.println("要插入的order为: "+order); dao.insertOder(conferenceId,order); } } }

  

标签:service,synchronized,实践,public,并发,资料,上传,order
From: https://www.cnblogs.com/1--2/p/17748865.html

相关文章

  • Kafka在企业级应用中的实践
    前言前面说了很多Kafka的性能优点,有些童鞋要说了,这Kafka在企业开发或者企业级应用中要怎么用呢?今天咱们就来简单探究一下。1、使用Kafka进行消息的异步处理Kafka提供了一个可靠的消息传递机制,使得企业能够将不同组件之间的通信解耦,实现高效的异步处理。在企业级应用中,可以......
  • 升讯威在线客服系统的并发高性能数据处理技术:对接百度自动翻译
    我在业余时间开发维护了一款免费开源的升讯威在线客服系统,也收获了许多用户。对我来说,只要能获得用户的认可,就是我最大的动力。最近客服系统成功经受住了客户现场组织的压力测试,获得了客户的认可。客户组织多名客服上线后,所有员工同一时间打开访客页面疯狂不停的给在线客服发消......
  • 大数据隐私与安全:应对挑战的最佳实践
    在今天的数字时代,大数据已经成为企业和组织中不可或缺的一部分。然而,随着大数据的应用范围不断扩大,关于数据隐私和安全的担忧也在不断增加。本文将讨论大数据隐私和安全的挑战,并提供一些应对这些挑战的最佳实践,同时附带一些示例代码来帮助读者更好地理解如何实施这些实践。加强数据......
  • 多线程抢票,并发问题
    Tread类中:currentThread().getName()可以拿到自己的名字sleep() 模拟延时 一、一样的创建一个线程类来实现Runnable接口并且重写run方法 这里定义了Num来代表票数 run方法来实现抢票 如果票没了就break退出循环并且运用了Thread类中的两个方法开头有介绍二、实......
  • 实验3:OpenFlow协议分析实践 实验4:开源控制器实践——OpenDaylight
    实验3:OpenFlow协议分析实践一、实验目的能够运用wireshark对OpenFlow协议数据交互过程进行抓包;能够借助包解析工具,分析与解释OpenFlow协议的数据包交互过程与机制。二、实验环境Ubuntu21.10三、实验内容搭建拓扑,完成相关IP配置,并连接OpenDaylight控制器,实现主机......
  • 解决DOS攻击生产案例:根据web日志或者或者网络连接数,监控当某个IP 并发连接数或者短时
    方法一:在awk中已经判断好并发连接数量的ip地址,传给whileread执行防火墙规则封掉对应的ip。root@centos8~]#catddos.sh#!/bin/bashss-nt|awk-F '[:]+''/ESTAB/{ip[$(NF-2)]++}END{for(iinip)if(ip[i]>100)printi}'|awk-F']''{print$1}'|whilere......
  • LLM实践-在Colab上使用免费T4 GPU进行Chinese-Llama-2-7b-4bit推理
    一、配置环境1、打开colab,创建一个空白notebook,在[修改运行时环境]中选择15GB显存的T4GPU.2、pip安装依赖python包!pipinstall--upgradeaccelerate!pipinstallbitsandbytestransformers_stream_generator!pipinstalltransformers!pipinstallsentencepiece!pip......
  • 1.1.4 实践环节——制作调查问卷
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title></head><body><h1>调查问卷</h1><h4><form>姓名&nbsp;&nbsp;&n......
  • Serverless平台knative第六章配置最大并发数及更新操作讲解
    并发数配置apiVersion:serving.knative.dev/v1kind:Servicemetadata:name:hellospec:template:metadata:name:hello-world-002spec:containerConcurrency:10#单个pod允许的最大并发数,超过将扩容containers:#-image:gcr......
  • Python异步编程并发比较之循环、进程、线程、协程
    服务端现在有一个api接口http://127.0.0.1:18081/hello批量请求该接口,该接口中有一个5s的阻塞。使用循环,多进程,多线程,协程等四种方式,一共请求10次,比较总的请求耗时。importtimefromflaskimportFlaskapp=Flask(__name__)@app.route('/hello')defhello_world():......