【高并发系列】17、线程池那些事儿1

C++并发编程性能优化实战:从设计到调试的全链路指南 并发编程是现代软件开发中提升多核CPU性能的核心技术,它通过同时执行多个任务来最大化硬件利用率。其原理涉及线程管理、同步机制和内存模型,旨在解决数据竞争、死锁等问题。在C++等系统级语言中,并发优化具有极高的技术价值,能显著提升游戏引擎、高频交易等高性能应用的吞吐量和响应速度。应用场景广泛,从服务器后端到实时数据处理都需要精细的并发设计。本文聚焦C++并发性能优化,深入探讨线程池、无锁数据结构等热词技术,以及如何通过工具链诊断和解决伪共享、锁竞争等常见性能瓶颈,帮助开发者构建既高效又稳定的多线程应用。 阅读详情

多线程软件设计方法可以最大限度地发挥现代多核处理器的计算能力,提高生产系统的吞吐量和性能;

JDK提供的Execotur框架:

1、固定大小线程池newFixedThreadPool

5个固定大小的线程池,提交10个任务,分2批执行任务;

public class ThreadPoolDemo {
	public static class MyTask implements Runnable {
		private String name;
		public MyTask(String name) {
			this.name = name;
		}
		@Override
		public void run() {
			try {
				System.out.println(System.currentTimeMillis() + ":" + this.name + ":" + Thread.currentThread().getName());
				TimeUnit.SECONDS.sleep(1);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
	public static void main(String[] args) {
		ExecutorService exec = Executors.newFixedThreadPool(5);
//		ExecutorService exec = Executors.newCachedThreadPool();
		for (int i = 0; i < 10; i++) {
			exec.submit(new MyTask("task" + i));
		}
		exec.shutdown();
	}
}

console

1550367982546:task1:pool-1-thread-2
1550367982546:task2:pool-1-thread-3
1550367982546:task0:pool-1-thread-1
1550367982547:task3:pool-1-thread-4
1550367982547:task4:pool-1-thread-5
1550367983551:task5:pool-1-thread-5
1550367983551:task6:pool-1-thread-1
1550367983552:task7:pool-1-thread-4
1550367983552:task9:pool-1-thread-3
1550367983552:task8:pool-1-thread-2

2、newCachedThreadPool

如果换成Executors.newCachedThreadPool();则直接创建10个线程执行任务,打印如下:

1550369486518:task1:pool-1-thread-2
1550369486518:task0:pool-1-thread-1
1550369486518:task2:pool-1-thread-3
1550369486519:task3:pool-1-thread-4
1550369486519:task4:pool-1-thread-5
1550369486519:task5:pool-1-thread-6
1550369486519:task6:pool-1-thread-7
1550369486520:task7:pool-1-thread-8
1550369486520:task8:pool-1-thread-9
1550369486520:task9:pool-1-thread-10

3、计划任务 ScheduledExecutorService

3.1 scheduleAtFixedRate

任务调度的频率是一定的

public class ScheduledExecutorServiceDemo {
	public static void main(String[] args) {
		ScheduledExecutorService ses = Executors.newScheduledThreadPool(10);
		ses.scheduleAtFixedRate(new Runnable() {
			@Override
			public void run() {
				try {
					TimeUnit.SECONDS.sleep(1);
					System.out.println(System.currentTimeMillis());
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		}, 0, 3, TimeUnit.SECONDS);
	}
}

任务执行需要先1秒多,任务间隔是3秒,所以打印如下:

1550384755251
1550384758254
1550384761254

如果将任务执行需要1秒改为5秒,即任务执行所需时间5秒大于任务执行间隔,则任务执行完之后立即执行下一个任务,即任务间隔改为5秒;

 

1550384873823
1550384878828
1550384883834

3.2 scheduleWithFixedDelay

任务之间的间隔是一定的

public class ScheduledExecutorServiceDemo {
	public static void main(String[] args) {
		ScheduledExecutorService ses = Executors.newScheduledThreadPool(10);
		ses.scheduleWithFixedDelay(new Runnable() {
			@Override
			public void run() {
				try {
					TimeUnit.SECONDS.sleep(1);
					System.out.println(System.currentTimeMillis());
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		}, 0, 3, TimeUnit.SECONDS);
	}
}

任务1秒,间隔3秒,打印出来间隔为4秒:

1550385980234
1550385984244
1550385988253
1550385992261
1550385996265

如果将任务执行需要1秒改为5秒,则打印出来实际间隔为8秒:

1550386073645
1550386081648
1550386089651
1550386097654
1550386105664

4、调度程序不一定会无限期地持续执行,如果任务本身抛出异常,后续的所有执行都会中断!

必须做好异常处理!

TongWeb 7.0.4.9_M4 企业级部署实战:从零到生产环境 本文详细介绍了TongWeb 7.0.4.9_M4企业级应用服务器的完整部署流程。内容涵盖从服务器环境准备、安装包验证、专用用户创建、JVM参数调优,到配置为Systemd服务、核心配置文件(tongweb.xml)优化、HTTPS配置,以及最终的服务验证、安全加固与生产环境监控维护方案,为企业用户提供了一套从零到生产环境的实战部署指南。 阅读详情

相关推荐

Redisson分布式锁原理、实战与避坑指南:从秒杀到缓存击穿的完整解决方案

在分布式系统和微服务架构中,并发控制是保障数据一致性的核心技术挑战。其核心原理在于通过一个全局可见的协调服务(如Redis),实现跨进程、跨服务的互斥访问,从而解决多节点同时操作共享资源引发的数据竞争问题。这项技术的核心价值在于为分布式环境提供了类似单机线程锁的同步能力,是构建高可靠、强一致性系统的基石。其典型应用场景广泛,包括防止电商秒杀中的库存超卖、确保分布式任务调度的幂等性、以及应对缓存击穿时对数据库的并发查询保护。本文以Java生态中广泛使用的Redisson客户端为例,深入剖析其基于Redis H

Eric.Net的专栏 363

多线程和并发库应用八-线程池

Java通过Executors提供几种线程池,主要有: newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。 newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。 newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来

u012957549的博客 3068

传统线程已死,虚拟线程当立!Java并发进入新纪元

好啦,这就是我答应华哥的一篇虚拟线程科普文。你如果也在搞后端开发,或者对 Java 未来路线感兴趣,一定要留意 Project Loom 的进展。,我会持续输出类似的干货。我是小米,一个爱讲技术故事的程序员,我们下次见!我是小米,一个喜欢分享技术的31岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货!

孤芳不自赏 751

为Groovy的Collection添加并行处理能力

我们知道Groovy中的集合操作collect是串行的。参见Groovy(1.8.6)的源代码org.codehaus.groovy.runtime.DefaultGroovyMethods /** * Iterates through this aggregate Object transforming each item into a new value using th...

sisyphe 559

C++工程师核心价值与市场需求深度解析:从现代特性到四大核心阵地

C++作为一门接近系统底层的编译型语言,其核心价值在于对硬件资源的直接控制和高性能执行效率。其原理基于静态类型系统和零成本抽象,允许开发者在保证类型安全的同时,通过手动内存管理和编译器优化实现极致性能。这一技术特性使其在需要高吞吐、低延迟或资源受限的场景中具有不可替代性。现代C++标准(C++11/14/17/20)通过引入智能指针、移动语义、Lambda表达式等特性,显著提升了开发效率与代码安全性。从技术价值看,C++是构建系统软件、基础设施和高性能计算组件的基石语言。其应用场景高度聚焦于对性能、实时性和

huqiyes的专栏 307

java并发编程面试题

文章目录1、Synchronized用过吗,其原理是什么?2、你刚才提到获取对象的锁,这个“锁”到底是什么?如何确定对象的 锁?3、什么是可重入性,为什么说Synchronized是可重入锁?4、JVM对Java的原生锁做了哪些优化?5、为什么说Synchronized是非公平锁?6、什么是锁消除和锁粗化?7、为什么说Synchronized是一个悲观锁?乐观锁的实现原理又是什么?什么是CAS,它有什么特性?8、乐观锁一定就是好的吗?9、跟Synchronized相比,可重入锁ReentrantLock其实

用文字记录下每一个瞬间的感动和每一次思考的火花 9万+

线程池的简单运用Executors.newFixedThreadPool

【代码】线程池的简单运用Executors.newFixedThreadPool。

weixin_45626078的博客 537

Transformer数学推导——Q38 旋转位置编码(RoPE)的复数形式 对注意力分数的几何影响分析

RoPE 的复数形式为自然语言处理中的位置编码提供了创新且有效的解决方案。通过深入的数学理论分析,明确了其对注意力分数的几何影响及在捕捉位置信息方面的优势。在 LLM 的实际应用中,RoPE 复数形式在多个任务和场景中展现出强大的性能,特别是在处理长序列文本时,能够有效捕捉长距离依赖、缓解位置编码局限性并提升处理效率。然而,RoPE 复数形式也面临计算复杂度高、超参数调整困难和位置信息平衡等挑战。通过合理的优化策略和与其他技术的结合,有望进一步提升其性能。

墨顿随笔 1419

java 多线程之Executors.newFixedThreadPool

//生成线程池最大3个并发线程 ExecutorService executorService = Executors.newFixedThreadPool(3); for(BookDO bookDO : Books){     //多线程执行子任务     executorService.submit(new BookCollector(bookDO, EagleEye.getR

somilong的博客 1659

通义灵码+高德 MCP:40分钟开发出游攻略网站

本文介绍了通义灵码与高德MCP在40分钟内快速开发出游攻略网站的全流程。主要内容包括:1)LingmaIDE开发环境的使用方法,涵盖界面操作、代码编辑、调试和智能编码功能;2)通义灵码智能体与高德MCP2.0的集成步骤,通过输入旅行需求即可自动生成包含天气卡片、景点路线等元素的HTML页面;3)重点展示了如何将行程规划导入高德地图APP,实现导航、打车等出行功能。整个开发过程充分利用了通义灵码的智能编码能力和高德地图的服务接口,显著提升了旅游类应用的开发效率。

soso1968的博客 986

周立功CAN盒二次开发实录:用QT5.1.0解析汽车CAN报文(附数据可视化技巧)

本文详细介绍了基于QT5.1.0和周立功USBCAN-E-U设备进行汽车CAN总线二次开发的实战过程。核心内容包括利用CANdb++数据库解析原始报文并转换为物理值,以及通过QCustomPlot库实现高性能实时数据可视化,为车载诊断与车联网开发提供了一套完整的工程实践方案。

sugar的博客 1058

ThreadPoolExecutor之FixedThreadPool详解

项目中大家基本都使用过线程池,节省线程创建和销毁的成本。Java JDK提供了几种线程池,那么如何选择合适的线程池?这就需要对每一种线程池有较详细的了解,然后根据实际业务类型,选择对应的线程池。 本文主要介绍FixedThreadPool。 定义 /** * Creates a thread pool that reuses a fixed number of threads ...

russle的专栏 2万+

VSCode玩转STM32:手把手教你配置EIDE插件与OpenOCD调试(附野火DAP配置文件详解)

本文详细介绍了如何在VSCode中配置EIDE插件与OpenOCD进行STM32开发,特别针对野火DAP调试器提供了配置文件详解。从基础环境搭建到深度调试技巧,帮助开发者高效完成STM32项目开发,实现现代化嵌入式开发工作流。

weixin_26905487的博客 553

虚拟线程+结构化并发实战!JDK26高并发代码这样写才稳

说句心里话,写Java并发代码这事儿,就跟在后厨同时炒十几个锅的菜差不多——看着挺猛,实际上手忙脚乱。Future套CompletableFuture,回调地狱深不见底,异常处理全靠随缘,取消任务更是玄学,有时候线程泄漏了都不知道咋回事。好消息是,JDK 26(2026年3月17日正式GA)带来了结构化并发(Structured Concurrency)的第六次预览。这次真不是画饼了,API基本定型,配合咱们已经很熟的虚拟线程(Virtual Threads),高并发代码终于可以写得像单线程一样清爽了。

HHX_01的博客 186

2023年12月机器人技术等级考试试卷(三级理论) 试题解析

2023年12月机器人技术等级考试试卷(三级理论) 试题解析

http://www.cierobot.com 4095

【第一章】基于Simulink的控制器开发教程——目录

摘要:本文系统介绍了基于Simulink的控制器开发方法,涵盖PID、状态反馈、模型预测(MPC)、模糊控制、自适应控制等8类主流控制器。针对每种控制器,详细阐述了其基本原理、适用场景,并通过Simulink建模与仿真测试进行实践验证。文章采用"理论+实践"的结构,从算法设计到硬件实现全流程展开,为汽车、航空航天、工业控制等领域的控制器开发提供完整解决方案,最后通过应用对比与学习总结帮助读者掌握不同控制器的核心特性和应用场景。(149字)

熟悉MATLAB/fpga/RK3588/LABVIEW/protus/单片机/dsp/Multisim 388

C++高并发服务构建:从Reactor模式到性能调优实战

高并发网络编程的核心在于高效处理海量连接与I/O事件,其基础是I/O多路复用技术,如Linux的epoll。该技术通过单线程或少量线程监控大量文件描述符,仅在事件就绪时触发处理,避免了传统多线程模型因线程切换和内存开销导致的性能瓶颈。基于此原理,Reactor模式成为构建高性能网络服务的经典架构,它将事件循环、事件分发与业务处理解耦,实现了高吞吐与低延迟。这种模式在实时通信、在线游戏、金融交易等需要处理大量并发连接的场景中具有极高价值。本文以构建一个实时在线用户状态推送服务为例,深入剖析了如何从零实现一个基

cuxiong8996的博客 578

【多模态实验总结】整理了几十篇文章,理清 多模态目标检测 在写论文中需要做哪些实验

此篇文章中将多模态目标检测所做的实验,分成了各个类别,目的是为了对多模态的实验有一个清晰的理解。可以看到,很多表格中放的并不是做了单一的某一个对比,而是将提出的模型,在不同的骨干、数据集上的效果与基线进行对比,使内容更全面。因此这里提到的各种实验,大家在后续改进写论文过程中可以根据自己的论文内容进行整合。对于这里提到的这些文章,大家都可以看看,我只是按照我这里的分类截取了部分实验,这里提到的所有实验在每篇文章中也基本能看到相应的实验。

Limiiiing的博客 3140

LinkedBlockingQueue 与 ArrayBlockingQueue:阻塞队列选型指南

摘要: 阻塞队列的选择直接影响系统性能与稳定性。LinkedBlockingQueue无参构造默认容量极大(Integer.MAX_VALUE),高并发下易引发OOM,需显式设置合理容量;ArrayBlockingQueue因全局锁设计,高并发时性能劣于LinkedBlockingQueue的分离锁机制。生产环境应避免无界队列和无限阻塞(put/take),推荐使用带超时的offer/poll方法,并配合容量计算(峰值QPS×延迟×1.3缓冲)、降级策略及监控告警。低并发场景可考虑ArrayBlocking

m0_67391377的博客 927

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SpringBoot在线考试系统:高并发架构、防作弊与智能分析实战

在线考试系统是教育信息化领域的核心应用,其本质是一个高并发、强一致性的实时Web系统。从技术原理上看,它需要处理的核心挑战包括高并发下的数据一致性、实时交互的可靠性以及业务流程的安全性。在技术价值层面,一个健壮的考试系统不仅能提升组织效率,更能通过技术手段保障考试的公平公正,其架构设计思想对电商秒杀、在线预约等高并发场景也有借鉴意义。典型的应用场景包括学校期末考试、企业认证考试和在线招聘笔试等。本文以SpringBoot技术栈为基础,深入探讨了如何利用Redis实现考试令牌和实时缓存,并结合WebSocke

weixin_30729609的博客 430

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Java 21上手记:为什么现在升级,舒服又省心?

可能有人会说:“我的 Java 8 还能用,为啥要升级?写高并发代码不用再和线程池死磕,同步代码写得爽,性能还更好;大内存服务不用再怕 GC 卡顿,运维压力小了一大截;代码更简洁,新人接手也快,团队效率都高了。就像手机系统升级,不是非更不可,但新功能用顺手了,真的回不去。现在 Java 21 的生态成熟了,迁移成本低了,正是试试的好时候 —— 等别人都用熟了,你再动手就落后啦。

lpfasd123的博客 1455

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

2024年最新Java面试题总结(附答案),字节跳动java研发面试题社招

Java架构学习技术内容包含有:Spring,Dubbo,MyBatis, RPC, 源码分析,高并发、高性能、分布式,性能优化,微服务 高级架构开发等等。还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书+2021年最新大厂面试题。本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录。

2401_84689238的博客 968

Jakarta EE新规范解读:Java+AI在微服务与云原生中的落地实战(附代码示例)

兄弟们,如果你还在用javax.*开头的包名写代码,那你就像是在2026年还在用诺基亚N95——虽然当年是机皇,但现在连微信都装不了。Jakarta EE 11这玩意儿,说白了就是Java企业开发的新户口本。以前叫Java EE,后来Oracle把商标还给了社区,Eclipse基金会接手后改名叫Jakarta EE。这就好比小区物业换了,门牌号从javax街改成了jakarta街,但房子还是那栋房子,甚至装修还更豪华了。说到Jakarta EE 11正式发布的时间线,这事儿还挺戏剧性。

HHX_01的博客 576

.net架构师高级编程技术汇总

汇总.net相关学习使用知识:好记性不如烂笔头1.架构师知识汇总2..net core 知识介绍3..net架构师的技能及需掌握的高级编程技术4.编程哪些事儿?从普通开发到架构师,补齐短板5.asp.net 反射reflection(原理读元数据,3种加载方法,反射的几种调用方法,反射在MVC,ORM中的应用)6.asp....

weixin_35651471的博客 407

Java RMI技术详解与案例分析

合集 - 威哥爱编程(17)1.35个Redis企业级性能优化点与解决方案06-252.对比传统数据库,TiDB 强在哪?谈谈 TiDB 的适应场景和产品能力06-253.深度长文解析SpringWebFlux响应式框架15个核心组件源码07-044.Nginx性能调优5招35式不可不知的策略实战07-085.Java Executors类的9种创建线程池的方法及应用场景分析07-096.Redi...

weixin_41455119的博客 327
上一篇: 【高并发系列】16、Guava的RateLimiter限流
下一篇: 【高并发系列】18、线程池那些事儿2 - 内部实现
hellboy0621
博客等级 码龄9年 61粉丝 147原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值