当前位置: 首页 > news >正文

网站布局的好坏的几个要素雨花区最新情况

网站布局的好坏的几个要素,雨花区最新情况,科技网站设计欣赏,以个人名义可以做网站吗阻塞队列以及阻塞队列的一个使用 阻塞队列简介 阻塞队列#xff08;Blocking Queue#xff09;是一种常见的队列数据结构#xff0c;它具有特殊的行为#xff0c;可以用于多线程编程中#xff0c;以协调不同线程之间的任务执行和数据传递。阻塞队列在多线程环境中非常有…阻塞队列以及阻塞队列的一个使用 阻塞队列简介 阻塞队列Blocking Queue是一种常见的队列数据结构它具有特殊的行为可以用于多线程编程中以协调不同线程之间的任务执行和数据传递。阻塞队列在多线程环境中非常有用因为它可以安全地在队列为空或已满时进行线程的阻塞或唤醒操作。 阻塞队列的主要特点包括 队列操作的线程安全性阻塞队列提供了线程安全的队列操作多个线程可以同时向队列中添加元素或者从队列中取出元素而不会导致数据不一致或竞态条件的问题。 阻塞操作当队列为空时试图从队列中取出元素的线程会被阻塞直到队列中有可用元素。当队列已满时试图向队列中添加元素的线程也会被阻塞直到队列有空间容纳新元素。 队列的大小限制阻塞队列通常具有一个最大容量当队列达到最大容量时试图向队列中添加元素的线程会被阻塞。 阻塞队列的使用场景包括多线程生产者-消费者问题、线程池任务管理、事件驱动编程等它们可以帮助有效地协调线程之间的工作提高多线程程序的效率和可维护性。 Java中的java.util.concurrent包提供了一些常见的阻塞队列实现如LinkedBlockingQueue和ArrayBlockingQueue等。其他编程语言和库中也有类似的实现用于支持多线程编程。 阻塞队列的应用 阻塞队列在多线程编程中有广泛的应用特别是在以下方面 生产者-消费者问题阻塞队列常用于解决生产者-消费者问题其中生产者线程将数据放入队列而消费者线程从队列中取出数据。阻塞队列可以有效地协调这两种操作确保生产者和消费者之间的同步和数据的安全传递。 线程池任务管理线程池中的任务队列通常是一个阻塞队列等待执行的任务会被放入队列中线程池中的工作线程从队列中取出任务并执行。这种方式可以控制同时执行的任务数量以防止资源过度消耗。 事件驱动编程在事件驱动编程中事件生产者将事件放入队列而事件消费者从队列中取出事件并响应。这种模型可以在多线程环境中实现阻塞队列用于传递事件数据。 在Java中你可以使用java.util.concurrent包提供的阻塞队列来方便地实现这些场景。以下是一个具体的Java示例演示了如何使用LinkedBlockingQueue来实现一个生产者-消费者模型 import java.util.concurrent.*;public class BlockingQueueExample {public static void main(String[] args) {// 创建一个容量为10的阻塞队列BlockingQueueInteger queue new LinkedBlockingQueue(10);// 创建生产者线程Thread producer new Thread(() - {try {for (int i 1; i 10; i) {System.out.println(Producing: i);queue.put(i); // 将数据放入队列Thread.sleep(1000); // 模拟生产过程}} catch (InterruptedException e) {e.printStackTrace();}});// 创建消费者线程Thread consumer new Thread(() - {try {for (int i 1; i 10; i) {int value queue.take(); // 从队列中取出数据System.out.println(Consuming: value);Thread.sleep(1500); // 模拟消费过程}} catch (InterruptedException e) {e.printStackTrace();}});// 启动生产者和消费者线程producer.start();consumer.start();} }在这个示例中生产者线程不断地向阻塞队列中放入数据而消费者线程不断地从队列中取出数据它们之间通过阻塞队列实现了同步。这个例子演示了阻塞队列在生产者-消费者问题中的应用。 阻塞队列Springboot实现案例之线程池任务管理 有这样一个场景如果要频繁存数据等待数据库的响应这样需要很长的时间但是如果流程逻辑正确的话我们可以先把结果返回给前端然后在异步进行数据的存储。 执行逻辑 创建一个阻塞队列你可以选择使用java.util.concurrent包中的阻塞队列如LinkedBlockingQueue来存储要插入数据库的数据。也可以用ArrayBlockingQueue当作阻塞队列。 private BlockingQueueUser blockingQueue new ArrayBlockingQueue(1024);创建一个异步方法在Spring中你可以使用Async注解来定义一个异步方法。这个方法将从阻塞队列中取出数据并将数据插入数据库。 Async public void processQueue() {while (true) {try {User user blockingQueue.take(); // 从队列中取出数据userService.save(user); // 插入数据库} catch (InterruptedException e) {Thread.currentThread().interrupt();break;}} }配置Spring异步支持确保你的Spring应用程序启用了异步支持。你需要在配置类中添加EnableAsync注解并配置一个TaskExecutor来执行异步方法。使用一个配置类 package com.xwhking.springboottemplate.config;import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.task.SimpleAsyncTaskExecutor; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;Configuration EnableAsync // 启用异步支持 public class AsyncThreadPoolConfig {Beanpublic ThreadPoolTaskExecutor taskExecutor() {ThreadPoolTaskExecutor executor new ThreadPoolTaskExecutor();executor.setCorePoolSize(5); // 核心线程数executor.setMaxPoolSize(10); // 最大线程数executor.setQueueCapacity(25); // 队列容量executor.setThreadNamePrefix(MyAsyncThread-); // 线程名称前缀executor.initialize(); // 初始化return executor;}Beanpublic SimpleAsyncTaskExecutor simpleAsyncTaskExecutor() {return new SimpleAsyncTaskExecutor();} } 编写Controller方法在Controller中编写一个方法该方法将数据放入阻塞队列。这个方法应该是同步的因为它只是将数据放入队列不会等待数据插入完成。 GetMapping(/addUser)public BaseResponseString testBlockQueue(String username , String password, String nickname){User user new User();user.setUsername(username);user.setPassword(password);user.setNickname(nickname);blockingQueue.offer(user);taskExecutor.execute(this::processQueue);return null;}Controller完整代码 package com.xwhking.springboottemplate.controller;import com.xwhking.springboottemplate.common.BaseResponse; import com.xwhking.springboottemplate.generator.domain.User; import com.xwhking.springboottemplate.generator.service.UserService; import org.springframework.core.task.TaskExecutor; import org.springframework.scheduling.annotation.Async; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue;RestController RequestMapping(/blockQueue) public class TestBlockQueueController {Resourceprivate UserService userService;private BlockingQueueUser blockingQueue new ArrayBlockingQueue(1024);ResourceTaskExecutor taskExecutor;Asyncpublic void processQueue() {while (true) {try {User user blockingQueue.take(); // 从队列中取出数据userService.save(user); // 插入数据库} catch (InterruptedException e) {Thread.currentThread().interrupt();break;}}}GetMapping(/addUser)public BaseResponseString testBlockQueue(String username , String password, String nickname){User user new User();user.setUsername(username);user.setPassword(password);user.setNickname(nickname);blockingQueue.offer(user);taskExecutor.execute(this::processQueue);return null;} } 相关程序解释 taskExecutor.execute(this::processQueue);相关解释 taskExecutor.execute(this::processQueue) 这行代码的意思是使用 taskExecutor一个 TaskExecutor 对象来执行 this::processQueue 表达式。这个表达式实际上是 Java 8 引入的方法引用Method Reference的一种形式表示对当前对象的 processQueue 方法的引用。 具体来说 this 表示当前对象即 TestBlockQueueController 类的实例。processQueue 是 TestBlockQueueController 类中定义的一个方法。 因此this::processQueue 表达式表示对当前对象的 processQueue 方法的引用。 taskExecutor.execute(this::processQueue) 这行代码的目的是将 processQueue 方法的执行放入 taskExecutor 管理的线程池中异步执行。这可以确保 processQueue 方法在一个独立的线程中运行而不会阻塞当前线程通常是 HTTP 请求的线程从而实现异步处理。 总结一下taskExecutor.execute(this::processQueue) 的作用是将 processQueue 方法提交给线程池异步执行而不是在当前线程中执行。这对于处理需要较长时间的任务或需要与其他任务并发执行的任务非常有用。
http://www.hkea.cn/news/14570053/

相关文章:

  • 自助建站基础工作主要包括()深圳网站建设推选上榜网络
  • 手机端网站加盟网站开发重点难点
  • 金融行业网站开发易企秀h5制作官网
  • php做的网站安全吗怎么投诉网站制作公司
  • 网站怎么做才被收录快正邦设计招聘
  • 医院网站开发违法吗做PS的赚钱的网站
  • 做的好的微信商城网站能上外国网站dns
  • 网站模板怎么改移动网站有哪些
  • 网站建设设计平台做外贸怎么登陆国外网站
  • 淄博 网站建设个人网站设计图片
  • 坂田做网站的公司给自己广告公司宣传
  • 用群晖nas做网站创业项目排行榜前十名
  • 网站建设企业排行榜wordpress快速部署
  • 手机网站用模版苏州互联网公司集中在哪里
  • 东莞网站开发前三强网站建设需要什么条件
  • 个人购物网站怎么备案吴江建设工程招标中心网站
  • 中兴建设有限公司网站外贸网站源代码下载
  • 常州在线制作网站环保类网站模板免费下载
  • 手机网站你了解的大连网站建设策划
  • 做网站投放广告vs2008做网站
  • 本科学院网站建设方案网站建设技术实现难点
  • 易语言怎么用网站做背景音乐企业首次建设网站的策划方案
  • 太原做网站价格做外贸翻译用哪个网站好
  • 基因网站开发wordpress 简码 文章图片
  • 漳州做网站多少钱你好南京网站
  • 昆山市住房和城乡建设网站成品源码1277
  • 建站公司用的服务器seo公司优化
  • 江苏 网站建设惠州做网站公司
  • asp.net 公司网站怎么申请网页域名
  • 成熟的网站怎么做seo推广好的竞价推广托管