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

昆明网站开发价格电子商务网站安全性能主要包括

昆明网站开发价格,电子商务网站安全性能主要包括,下载网站模板怎么使用教程,国际重大新闻#x1f648;作者简介#xff1a;练习时长两年半的Java up主 #x1f649;个人主页#xff1a;程序员老茶 #x1f64a; ps:点赞#x1f44d;是免费的#xff0c;却可以让写博客的作者开心好久好久#x1f60e; #x1f4da;系列专栏#xff1a;Java全栈#xff0c;… 作者简介练习时长两年半的Java up主 个人主页程序员老茶 ps:点赞是免费的却可以让写博客的作者开心好久好久 系列专栏Java全栈计算机系列火速更新中 格言种一棵树最好的时间是十年前其次是现在 动动小手点个关注不迷路感谢宝子们一键三连 目录 课程名Java内容/作用知识点/设计/实验/作业/练习学习JUC的线程池架构 JUC的线程池架构一、线程池的基本概念二、线程池的使用方法1. 创建线程池2. 提交任务到线程池3. 关闭线程池 三、线程池的核心组件1. ThreadPoolExecutor2. BlockingQueue3. 拒绝策略 四、自定义线程池示例1. 创建自定义线程池2. 使用自定义线程池 课程名Java 内容/作用知识点/设计/实验/作业/练习 学习JUC的线程池架构 JUC的线程池架构 本文主要介绍Java中如何使用java.util.concurrent包中的线程池ExecutorService和ThreadPoolExecutor来实现高并发、高可用的系统。我们将从线程池的基本概念、使用方法、核心组件以及自定义线程池四个方面进行阐述。 一、线程池的基本概念 线程池是一种管理线程的机制它可以有效地控制线程的数量避免大量线程之间的切换导致性能下降。线程池中的线程可以被复用当一个任务完成后线程不会被销毁而是被重新分配给新的任务。 二、线程池的使用方法 1. 创建线程池 在Java中可以通过Executors工具类来创建不同类型的线程池。例如创建一个固定大小的线程池 import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors;public class ThreadPoolDemo {public static void main(String[] args) {ExecutorService executorService Executors.newFixedThreadPool(5);} }2. 提交任务到线程池 使用submit()方法将任务提交到线程池中执行 executorService.submit(new Runnable() {Overridepublic void run() {System.out.println(任务执行中...);} });3. 关闭线程池 当所有任务都执行完毕后需要关闭线程池以释放资源 executorService.shutdown();三、线程池的核心组件 1. ThreadPoolExecutor ThreadPoolExecutor是ExecutorService接口的实现类它提供了更多的功能如定时执行、定期执行、异常处理等。我们通常需要自己实现一个ThreadPoolExecutor来满足业务需求。 2. BlockingQueue BlockingQueue是一个阻塞队列用于存放待处理的任务。它是一个FIFO先进先出的队列当队列满时新来的任务会等待当队列为空时正在执行的任务会等待。常用的阻塞队列有ArrayBlockingQueue、LinkedBlockingQueue和SynchronousQueue。 3. 拒绝策略 当线程池无法处理新提交的任务时需要采取一定的策略来处理这些任务。Java中的RejectedExecutionHandler接口提供了四种默认的拒绝策略 CallerRunsPolicy直接在调用者线程中运行任务。AbortPolicy抛出一个未检查异常中断任务。DiscardPolicy丢弃任务不做任何处理。DiscardOldestPolicy丢弃队列中最旧的任务尝试重新提交新任务。 我们可以根据实际需求自定义拒绝策略。例如下面是一个自定义的拒绝策略示例 import java.util.concurrent.RejectedExecutionHandler; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.atomic.AtomicInteger;public class CustomRejectedExecutionHandler implements RejectedExecutionHandler {private static final int MAX_CAPACITY 100; // 最大容量private AtomicInteger rejectedCount new AtomicInteger(); // 被拒绝的任务计数器private ArrayBlockingQueueRunnable taskQueue; // 任务队列public CustomRejectedExecutionHandler() {taskQueue new ArrayBlockingQueue(MAX_CAPACITY); // 初始化任务队列}Overridepublic void rejectedExecution(Runnable r, ThreadPoolExecutor executor) { // 拒绝策略实现方法if (taskQueue.remainingCapacity() 0) { // 如果队列已满添加拒绝策略executor.setRejectedExecutionHandler(new RejectedExecutionHandler() { // 设置新的拒绝策略Overridepublic void rejectedExecution(Runnable r, ThreadPoolExecutor executor) { // 拒绝策略实现方法AbortPolicySystem.err.println(Task queue is full, rejecting task: r); // 输出错误信息并抛出异常AbortPolicythrow new RejectedExecutionException(Task queue is full, r); // 抛出RejectedExecutionException异常AbortPolicy}});} else { // 如果队列未满将任务添加到队列中并增加计数器CallerRunsPolicy或直接抛出异常DiscardPolicy/DiscardOldestPolicytaskQueue.put(r); // 将任务添加到队列中非阻塞rejectedCount.incrementAndGet(); // 被拒绝的任务计数器加1CallerRunsPolicy/DiscardPolicy/DiscardOldestPolicy或直接抛出异常DiscardPolicy/DiscardOldestPolicy}} }四、自定义线程池示例 下面我们通过一个示例来说明如何自定义线程池假设我们需要一个支持定时执行和周期性执行的任务线程池我们可以这样实现 要实现一个支持定时执行和周期性执行的任务线程池我们可以创建一个自定义的线程池类继承自ThreadPoolExecutor并重写其中的方法。以下是一个简单的示例 import java.util.concurrent.*;public class CustomThreadPoolExecutor extends ThreadPoolExecutor {private final long keepAliveTime;private final TimeUnit unit;public CustomThreadPoolExecutor(int corePoolSize, long keepAliveTime, TimeUnit unit) {super(corePoolSize);this.keepAliveTime keepAliveTime;this.unit unit;}Overrideprotected void beforeExecute(Thread t, Runnable r) {super.beforeExecute(t, r);// 在任务执行前执行的操作例如记录日志、初始化资源等}Overrideprotected void afterExecute(Runnable r, Throwable t) {super.afterExecute(r, t);// 在任务执行后执行的操作例如清理资源、记录日志等}public void scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit) {super.scheduleAtFixedRate(command, initialDelay, period, unit);}public void scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit) {super.scheduleWithFixedDelay(command, initialDelay, delay, unit);} }在这个示例中我们创建了一个名为CustomThreadPoolExecutor的自定义线程池类它继承自ThreadPoolExecutor。我们为这个类添加了两个方法scheduleAtFixedRate和scheduleWithFixedDelay分别用于定时执行和周期性执行任务。这两个方法内部调用了父类的相应方法来实现任务调度。 使用这个自定义线程池的示例代码如下 import java.util.concurrent.*;public class CustomThreadPoolExample {public static void main(String[] args) throws InterruptedException {CustomThreadPoolExecutor threadPool new CustomThreadPoolExecutor(2, 10, TimeUnit.SECONDS);for (int i 0; i 5; i) {final int taskId i;threadPool.execute(() - {System.out.println(Task taskId is running);try {TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Task taskId is completed);});}// 关闭线程池所有任务执行完成后线程池不再接受新任务threadPool.shutdown();} }在这个示例中我们创建了一个定时执行任务的线程池核心线程数为2任务间隔时间为10秒。然后我们提交了5个任务到线程池每个任务打印一条开始和结束信息并在运行过程中暂停1秒。由于线程池具有定时执行功能因此这些任务会按照设定的时间间隔依次执行。最后我们在所有任务执行完成后关闭线程池。 在Java中我们可以通过java.util.concurrent.Executors类创建线程池。然而有时候我们需要创建一个具有特定功能的线程池例如定时执行任务、周期性执行任务等。这时我们可以创建一个自定义的线程池来实现这些功能。本文将介绍如何创建一个自定义线程池并通过一个示例来演示其使用方法。 1. 创建自定义线程池 要创建一个自定义线程池我们需要实现java.util.concurrent.ThreadPoolExecutor接口并重写其中的方法。以下是一个简单的自定义线程池实现 import java.util.concurrent.*;public class CustomThreadPoolExecutor extends ThreadPoolExecutor {private final int corePoolSize;private final BlockingQueueRunnable workQueue;private final long keepAliveTime;private final TimeUnit unit;public CustomThreadPoolExecutor(int corePoolSize, BlockingQueueRunnable workQueue, long keepAliveTime, TimeUnit unit) {this.corePoolSize corePoolSize;this.workQueue workQueue;this.keepAliveTime keepAliveTime;this.unit unit;}Overrideprotected void beforeExecute(Thread t, Runnable r) {super.beforeExecute(t, r);// 在任务执行前执行的操作例如记录日志、初始化资源等}Overrideprotected void afterExecute(Runnable r, Throwable t) {super.afterExecute(r, t);// 在任务执行后执行的操作例如清理资源、记录日志等} }2. 使用自定义线程池 创建好自定义线程池后我们可以像使用普通的ThreadPoolExecutor一样使用它。以下是一个使用自定义线程池的示例 import java.util.concurrent.*; import java.util.concurrent.atomic.AtomicInteger;public class CustomThreadPoolExample {public static void main(String[] args) {// 创建一个定时执行任务的线程池CustomThreadPoolExecutor threadPool new CustomThreadPoolExecutor(2, new LinkedBlockingQueue(2), 30, TimeUnit.SECONDS);// 提交任务到线程池for (int i 0; i 5; i) {final int taskId i;threadPool.execute(() - {System.out.println(Task taskId is running);try {TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Task taskId is completed);});}// 关闭线程池所有任务执行完成后线程池不再接受新任务threadPool.shutdown();} }在这个示例中我们创建了一个定时执行任务的线程池最大容量为2任务队列大小为2空闲线程的存活时间为30秒。然后我们提交了5个任务到线程池每个任务打印一条开始和结束信息并在运行过程中暂停1秒。由于线程池具有定时执行功能因此这些任务会按照设定的时间间隔依次执行。最后我们在所有任务执行完成后关闭线程池。 往期专栏Java全栈开发数据结构与算法计算机组成原理操作系统数据库系统物联网控制原理与技术
http://www.hkea.cn/news/14518504/

相关文章:

  • 站长工具关键词挖掘制作网页的基本步骤记事本
  • 做网站用虚拟主机还是用服务器wordpress tag别名
  • 网站开发账务处理敦煌做网站 条件
  • 个人网站对应网站网址大棚网站怎么做
  • 外国做电子产品网站有哪些微信开放平台注册流程
  • 淘宝客做网站需要那些条件没有公司自己做网站
  • 网站备案无前置审批文件wordpress资源站模板
  • 川渝建设集团网站短视频素材下载网站 免费
  • 淄博做网站58同城营销型网站建设申请域名时公司类型的域名后缀一般是?
  • 广州公司制作网站学电脑零基础怎样才可以快速学
  • 做网站犯法吗建设学院网站
  • 泰安中商网络做的网站怎么进入discuz 做网站可以吗
  • 用什么工具做网站自助建站源码下载
  • 怎么给自己做网站吗网站迁移后 域名
  • 网站推广120种方法建行生活网页版登录入口
  • 中卫市住房和城乡建设局网站桂林森威建筑工程监理有限责任公司
  • 网站开发维护合同书上海营销策划公司哪家好
  • 网站建设与推广的实训报告武义建设局网站
  • 辽宁省建设厅注册中心网站在线网站转app
  • 小说网站建立wordpress国内网站
  • 宁夏吴忠网站建设莱芜在线论坛莱芜一中李念学
  • 网站搭建软件长沙市建设工程质量安全监督站官方网站
  • wordpress最新官方默认主题seo教程正规化岚鸿
  • 网站建设是干什么室内设计公司图片
  • 推广营销企业网店搜索引擎优化的方法
  • 建网站服务h5移动端开发
  • 数字营销seo培训多少钱
  • 怎么做网站首页关键词什么网站专做外贸
  • 地下彩票网站建设旅游网站制作分析
  • 网站推广优化的公司pageadmin做的网站的域名必须要备案吗