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

全面了解网站开发wordpress顶部菜单调用

全面了解网站开发,wordpress顶部菜单调用,网站建设费用 多少钱,企业网站建设的一般要素包括什么JUC线程池架构 在Java开发中#xff0c;线程的创建和销毁对系统性能有一定的开销#xff0c;需要JVM和操作系统的配合完成大量的工作。 JVM对线程的创建和销毁#xff1a; 线程的创建需要JVM分配内存、初始化线程栈和线程上下文等资源#xff0c;这些操作会带来一定的时间和…JUC线程池架构 在Java开发中线程的创建和销毁对系统性能有一定的开销需要JVM和操作系统的配合完成大量的工作。 JVM对线程的创建和销毁 线程的创建需要JVM分配内存、初始化线程栈和线程上下文等资源这些操作会带来一定的时间和内存开销。JVM需要通过与操作系统的交互进行系统调用涉及到资源分配、权限检查等操作。线程的销毁需要释放已分配的内存和其他系统资源这也需要一定的开销。 操作系统对线程的管理 操作系统在内核层面管理线程每个线程都需要占用操作系统的资源包括内存、CPU时间片、线程调度等。创建和销毁线程涉及到操作系统的系统调用如创建线程栈、设置线程上下文、更新线程调度信息等。过多的线程会增加操作系统的负担导致资源竞争和上下文切换的开销增加。 为了减少这些开销Java引入了线程池的概念。线程池可以预先创建一定数量的线程并重用这些线程来处理任务从而减少线程的创建和销毁频率提高系统的性能和效率。 使用线程池的主要优势包括 减少线程创建和销毁的开销线程池在应用启动时创建一定数量的线程并将它们保存在池中避免了频繁的创建和销毁操作。线程重用线程池可以重用线程来执行多个任务避免了反复创建线程的开销。动态调整线程数量线程池可以根据任务负载情况动态调整线程数量提高系统的处理能力和响应性能。管理和监控线程线程池提供管理和监控线程的功能可以设置线程的优先级、超时时间等提供更好的线程控制和调优能力。 1.JUC线程池架构 在多线程编程中任务都是一些经过抽象的工作单元而线程就是让任务异步执行的基本机制。随着我们应用开发的扩张线程和任务的管理也开始变得非常复杂为了简化这些复杂的线程管理这个时候就需要一个“管理者”来统一管理线程及任务分配这个就是线程池。 有关线程池接口 和 类的架构图大致如下 Executor执行任务 Executor是Java异步目标任务的执行者接口其目的就是来执行目标任务。Executor通过execute()接口来执行已经提交的Runnable目标实例。其目的就是将任务执行者任务提交者分离开来。 Executor框架的主要目的是将任务的提交和执行进行解耦将任务的创建和执行逻辑分离开来。通过使用Executor框架可以将任务的提交和执行过程进行灵活管理并提供了一些常用的线程池实现简化了多线程编程的复杂性。 它只包含了一个方法 public interface Executor {/*** Executes the given command at some time in the future. The command* may execute in a new thread, in a pooled thread, or in the calling* thread, at the discretion of the {code Executor} implementation.** param command the runnable task* throws RejectedExecutionException if this task cannot be* accepted for execution* throws NullPointerException if command is null*/void execute(Runnable command); } ExecutorService提交任务 ExecutorService继承Executor。他是Java中异步目标任务的执行者服务接口对外提供异步任务的接收服务。ExecutorService对外提供了接收异步任务并转发给执行者的方法例如submit系列方法invoke系列方法等。 // 向线程池提交单个任务 T FutureT submit(CallableT task); T FutureT submit(Runnable task, T result); Future? submit(Runnable task);// 批量向线程池提交任务 T ListFutureT invokeAll(Collection? extends CallableT tasks) throws InterruptedException; T ListFutureT invokeAll(Collection? extends CallableT tasks,long timeout, TimeUnit unit) throws InterruptedException;AbstractExecutorService AbstractExecutorService是Java中ExecutorService接口的一个抽象实现类。它提供了ExecutorService接口的部分默认实现以便更方便地创建自定义的ExecutorService实现。 AbstractExecutorService实现了ExecutorService接口中的大部分方法包括提交任务、关闭执行器、等待任务完成等。它还提供了一些辅助方法和模板方法可以供子类进行扩展和定制。 以下是AbstractExecutorService中一些重要的方法和概念 submit(Runnable task)和submit(CallableT task)方法这些方法用于将任务提交给执行器并返回一个代表任务结果的Future对象。submit(Runnable task)方法接受Runnable任务不返回结果submit(CallableT task)方法接受Callable任务返回一个Future对象可以通过它获取任务的执行结果。shutdown()和shutdownNow()方法shutdown()方法用于平缓关闭执行器不再接受新的任务提交但会等待已提交的任务执行完成。shutdownNow()方法更加强制它尝试停止执行器并取消所有未执行的任务。 shutdown()方法 shutdown()方法是一个平缓的关闭方法。调用该方法后ExecutorService将停止接受新的任务提交但会等待已提交的任务执行完成。shutdown()方法不会中断正在执行的任务而是会等待任务自行完成或等待超时。在调用shutdown()方法后可以使用awaitTermination()方法来等待所有任务执行完成或者使用isTerminated()方法来判断是否所有任务都已经执行完成。 shutdownNow()方法 shutdownNow()方法是一个强制关闭方法。调用该方法后ExecutorService将尝试停止当前正在执行的任务并取消所有未执行的任务。shutdownNow()方法会中断正在执行的任务即使任务正在阻塞中它们也会收到InterruptedException。shutdownNow()方法返回一个ListRunnable其中包含所有未执行的任务。这样可以检查和处理未执行的任务。 invokeAny(Collection? extends CallableT tasks)和invokeAll(Collection? extends CallableT tasks)方法这些方法用于提交一组任务并等待其中一个或所有任务完成。invokeAny()方法返回其中一个任务的结果invokeAll()方法返回所有任务的结果。isShutdown()和isTerminated()方法isShutdown()方法用于判断执行器是否已经关闭isTerminated()方法用于判断是否所有任务都已经执行完成。 ThreadPoolExecutor 下面我们就来了解一下大名鼎鼎的线程池实现类ThreadPoolExecutor它继承与AbstractExecutorService抽象类。ThreadPoolExecutor是JUC线程池的核心实现类线程的创建和中止都需要很大的开销线程池为我们提供了指定数量的可重用的线程所以使用线程池可以很大程度上节省系统资源并且每个线程池都维护了一些基础的数据统计方便线程的管理和监控。 我们先来简单了解一下ThreadPoolExecutor的参数后面会详细讲解每个参数具体的意义。 ThreadPoolExecutor的一些重要概念 核心线程Core Threads核心线程是线程池中保持活动状态的最小线程数。即使线程是空闲的也会保持这个数量的线程。核心线程在线程池的整个生命周期中都会存在除非显式地调用了allowCoreThreadTimeOut()方法来允许核心线程超时退出。最大线程数Maximum Threads最大线程数指定了线程池中允许的最大线程数。当任务数量超过核心线程数且工作队列已满时线程池会创建新的线程直到达到最大线程数。超过最大线程数的任务将被拒绝执行默认情况下会抛出RejectedExecutionException异常。工作队列Work Queue工作队列用于存储还未执行的任务。当线程池的线程都处于忙碌状态时新提交的任务会被放入工作队列中等待执行。ThreadPoolExecutor提供了不同的工作队列实现例如ArrayBlockingQueue、LinkedBlockingQueue、SynchronousQueue等。拒绝策略Rejected Execution Policy当线程池无法接受新的任务时例如达到最大线程数并且工作队列已满拒绝策略定义了如何处理这些被拒绝的任务。ThreadPoolExecutor提供了几种预定义的拒绝策略如AbortPolicy、CallerRunsPolicy、DiscardPolicy和DiscardOldestPolicy同时还支持自定义拒绝策略。线程池生命周期ThreadPool Lifecycle线程池存在着不同的生命周期阶段包括初始化、运行中和关闭。线程池的生命周期可以通过调用shutdown()或shutdownNow()方法进行关闭。在关闭线程池之前可以使用isShutdown()方法检查线程池是否已经关闭使用isTerminated()方法判断是否所有任务都已经执行完成。 CallerRunsPolicy CallerRunsPolicy是Java线程池中的一个饱和策略RejectedExecutionHandler。当线程池无法接受新的任务时该策略会将任务交给调用线程来执行。 当线程池中的工作队列已满且无法继续接受新的任务时饱和策略会决定如何处理这些被拒绝的任务。CallerRunsPolicy是其中一种饱和策略它的行为是将被拒绝的任务交给调用线程来执行而不是在新的线程中执行。 CallerRunsPolicy的特点如下 任务在调用线程中执行当线程池无法接受新的任务时被拒绝的任务会由调用线程直接执行而不是在新的线程中执行。这意味着任务的执行会阻塞调用线程可能导致调用线程的执行时间延长。保证任务不会丢失CallerRunsPolicy保证被拒绝的任务不会丢失。尽管任务可能无法在期望的时间内执行但它们最终会被执行从而确保任务不会被丢弃。适用于一些特定场景CallerRunsPolicy适用于一些需要保证任务执行顺序或依赖调用线程的场景。当线程池的工作队列已满时将任务交给调用线程执行可以确保任务的顺序性和正确性。 AbortPolicy AbortPolicy是Java线程池中的一个饱和策略RejectedExecutionHandler。当线程池无法接受新的任务时该策略会抛出RejectedExecutionException异常拒绝执行新的任务。 当线程池中的工作队列已满且无法继续接受新的任务时饱和策略会决定如何处理这些被拒绝的任务。AbortPolicy是其中一种饱和策略它的行为是直接抛出异常不执行被拒绝的任务。 AbortPolicy的特点如下 抛出异常当线程池无法接受新的任务时被拒绝的任务会导致RejectedExecutionException异常被抛出。这意味着无法处理的任务会被拒绝执行并且调用方可以捕获该异常进行处理。不保证任务的执行AbortPolicy不保证被拒绝的任务一定不会执行。由于线程池已经饱和且无法接受新的任务被拒绝的任务可能无法执行并且不会进入工作队列等待执行。适用于需要严格控制任务提交的场景AbortPolicy适用于一些需要严格控制任务提交的场景。当线程池无法接受新的任务时抛出异常可以通知调用方任务无法执行从而确保任务提交的可控性。 DiscardPolicy DiscardPolicy是Java线程池中的一个饱和策略RejectedExecutionHandler。当线程池无法接受新的任务时该策略会默默地丢弃被拒绝的任务不做任何处理。 当线程池中的工作队列已满且无法继续接受新的任务时饱和策略会决定如何处理这些被拒绝的任务。DiscardPolicy是其中一种饱和策略它的行为是直接丢弃被拒绝的任务不执行也不抛出异常。 DiscardPolicy的特点如下 默默丢弃任务当线程池无法接受新的任务时被拒绝的任务会被默默地丢弃不做任何处理。这意味着无法处理的任务会被直接丢弃不会被执行。不保证任务的执行DiscardPolicy不保证被拒绝的任务一定不会执行。由于线程池已经饱和且无法接受新的任务被拒绝的任务会被直接丢弃不会进入工作队列等待执行。适用于忽略任务执行的场景DiscardPolicy适用于一些对任务执行无关紧要的场景。当任务被拒绝执行时丢弃任务可以忽略任务执行从而避免对整个系统产生影响。 DiscardOldestPolicy DiscardOldestPolicy是Java线程池中的一个饱和策略RejectedExecutionHandler。当线程池无法接受新的任务时该策略会丢弃工作队列中最旧的任务为新的任务腾出空间并尝试将新任务添加到工作队列中。 当线程池中的工作队列已满且无法继续接受新的任务时饱和策略会决定如何处理这些被拒绝的任务。DiscardOldestPolicy是其中一种饱和策略它的行为是丢弃工作队列中最旧的任务并尝试将新任务添加到工作队列中。 DiscardOldestPolicy的特点如下 丢弃最旧的任务当线程池无法接受新的任务时被拒绝的任务会导致工作队列中最旧的任务被丢弃。这意味着最旧的任务会被抛弃为新的任务腾出空间。尝试添加新任务DiscardOldestPolicy会尝试将新的任务添加到工作队列中。如果添加成功则新任务可以被执行如果添加失败例如工作队列已满则新任务也会被丢弃。不保证任务的执行DiscardOldestPolicy不保证被拒绝的任务一定不会执行。由于线程池已经饱和且无法接受新的任务被拒绝的任务可能无法执行并且不会进入工作队列等待执行。 ThreadFactory ThreadFactory是Java中的一个接口用于创建线程对象。它提供了一种自定义线程创建方式的机制允许开发者在创建线程时进行一些额外的配置或处理。 ThreadFactory接口定义了一个方法newThread该方法接收一个Runnable对象作为参数并返回一个新创建的Thread对象。开发者可以根据自己的需求在newThread方法中实现自定义的线程创建逻辑。 下面是ThreadFactory接口的定义 public interface ThreadFactory {Thread newThread(Runnable r); }ThreadFactory接口只有一个方法newThread它接收一个Runnable参数并返回一个Thread对象。在实现ThreadFactory接口时开发者需要提供自己的线程创建逻辑例如设置线程的名称、优先级、异常处理等。 Worker Worker指的是执行任务的工作线程。线程池是一种用于管理和复用线程的机制它通过预先创建一组工作线程来执行提交的任务从而提供了一种有效地处理并发任务的方式。 Worker是线程池中的核心组成部分它负责从任务队列中获取任务并执行。线程池中的每个Worker都是一个独立的工作线程可以并发地执行任务。 Worker的主要职责包括 从任务队列中获取任务Worker会不断地从任务队列中获取待执行的任务。任务队列可以是一个阻塞队列当队列为空时Worker会等待直到有新的任务被提交到队列中。执行任务一旦Worker获取到任务它会执行任务的具体逻辑。任务可以是一个Runnable对象或Callable对象根据任务的类型进行执行。处理异常Worker负责捕获和处理任务执行过程中可能抛出的异常。它可以根据需要记录异常信息、进行错误处理或通知相关方。生命周期管理Worker的生命周期由线程池进行管理。线程池可以动态地创建、销毁和管理Worker线程以适应不同的工作负载。 通过使用Worker线程线程池可以提供以下好处 重用线程Worker线程可以被线程池重用避免了频繁地创建和销毁线程的开销。并发执行线程池中的多个Worker线程可以并发地执行多个任务提高任务处理的效率。控制并发度线程池可以限制并发执行的任务数量防止系统资源被过度占用。提供任务排队和调度线程池通过任务队列来管理待执行的任务可以灵活地控制任务的排队和调度策略。 ScheduledExecutorService ScheduledExecutorService是Java中的一个接口继承自ExecutorService接口用于在预定的时间间隔内执行任务。它提供了一种方便的方式来调度任务的执行并且可以支持延迟执行和周期性执行。 ScheduledExecutorService的主要特点如下 任务调度ScheduledExecutorService可以安排任务在指定的时间点执行或者延迟一定时间后执行。它提供了一些方法如schedule()、scheduleAtFixedRate()和scheduleWithFixedDelay()用于安排任务的执行时间。延迟执行ScheduledExecutorService可以延迟任务的执行。通过schedule()方法可以指定任务的延迟时间任务将在延迟时间过后执行一次。周期性执行ScheduledExecutorService支持周期性执行任务。通过scheduleAtFixedRate()方法可以指定任务的初始延迟时间和执行周期任务将在指定的延迟时间过后开始执行并在每个周期结束后立即重新执行。线程池支持ScheduledExecutorService通常使用线程池来执行任务。它可以使用线程池中的线程来执行任务以便高效地管理和复用线程资源。线程池可以通过Executors类的方法创建例如newScheduledThreadPool()。可取消任务ScheduledExecutorService允许取消已安排的任务。通过返回的ScheduledFuture对象可以使用cancel()方法取消任务的执行。取消的任务将不再执行已经在执行的任务可以被中断。 通过使用ScheduledExecutorService可以实现定时任务、周期性任务和延迟任务的调度。它提供了灵活的任务调度功能使得在应用程序中执行定时或延迟任务变得简单和可靠。 请注意ScheduledExecutorService是一个接口它的具体实现类是ScheduledThreadPoolExecutor它是ThreadPoolExecutor的扩展提供了调度任务的功能。 ScheduledThreadPoolExecutor ScheduledThreadPoolExecutor是Java中的一个类它是ScheduledExecutorService接口的具体实现类。它继承自ThreadPoolExecutor类并增加了调度任务的功能。 ScheduledThreadPoolExecutor具有以下特点 任务调度ScheduledThreadPoolExecutor可以安排任务在指定的时间点执行或者延迟一定时间后执行。它提供了一些方法如schedule()、scheduleAtFixedRate()和scheduleWithFixedDelay()用于安排任务的执行时间。线程池支持ScheduledThreadPoolExecutor使用线程池来执行任务。它继承自ThreadPoolExecutor类因此可以充分利用线程池的功能包括线程的复用、线程池大小的控制和线程的生命周期管理。优雅关闭ScheduledThreadPoolExecutor可以通过调用shutdown()或shutdownNow()方法来关闭线程池。在关闭之前它会等待所有已安排的任务执行完成并停止接受新的任务。可以使用isShutdown()方法检查线程池是否已经关闭使用isTerminated()方法判断是否所有任务都已经执行完成。灵活的任务调度策略ScheduledThreadPoolExecutor提供了多种任务调度策略。例如scheduleAtFixedRate()方法可以按照固定的速率执行任务无论任务的执行时间是否超过周期scheduleWithFixedDelay()方法可以在任务执行完成后等待固定的延迟时间再执行下一个任务。可取消任务ScheduledThreadPoolExecutor允许取消已安排的任务。通过返回的ScheduledFuture对象可以使用cancel()方法取消任务的执行。取消的任务将不再执行已经在执行的任务可以被中断。 使用ScheduledThreadPoolExecutor可以轻松地实现定时任务、周期性任务和延迟任务的调度。它提供了灵活的任务调度功能并且通过线程池的管理能够高效地执行任务。 请注意ScheduledThreadPoolExecutor是ScheduledExecutorService接口的默认实现它提供了最常用的功能和调度策略。如果需要更高级的功能也可以通过自定义实现ScheduledExecutorService接口来实现。 DelayedWorkQueue DelayedWorkQueue是Java中的一个工作队列实现用于存储延迟执行的任务。它是ScheduledThreadPoolExecutor类中使用的默认工作队列。 DelayedWorkQueue的特点如下 存储延迟任务DelayedWorkQueue用于存储延迟执行的任务。每个任务都有一个延迟时间任务将在延迟时间过后才能被执行。延迟时间可以是固定的时间段也可以是任务提交的时间点到执行时间点的时间间隔。按照延迟时间排序DelayedWorkQueue按照任务的延迟时间进行排序。队列中的任务按照延迟时间从小到大排列即延迟时间最小的任务排在队列的前面最先被取出执行。这样可以确保任务按照预定的延迟时间顺序执行。基于优先级的比较DelayedWorkQueue使用任务的延迟时间和优先级进行比较。在延迟时间相等的情况下优先级高的任务会被排在前面优先执行。这样可以确保在延迟时间相等的情况下具有高优先级的任务先被执行。 ScheduledFutureTask ScheduledFutureTask是Java中的一个类它是ScheduledThreadPoolExecutor类中使用的任务实现。它继承自FutureTask类并实现了ScheduledFuture接口。 ScheduledFutureTask的特点如下 延迟执行和周期性执行ScheduledFutureTask用于表示延迟执行和周期性执行的任务。它可以安排任务在指定的延迟时间后执行一次也可以按照固定的周期执行任务。可取消任务ScheduledFutureTask允许取消已安排的任务。通过调用cancel()方法可以取消任务的执行。已取消的任务将不再执行已经在执行的任务可以被中断。任务调度信息ScheduledFutureTask包含任务的调度信息如延迟时间、周期和任务的执行时间等。它提供了一些方法如getDelay()和getPeriod()用于获取任务的延迟时间和周期。任务执行状态ScheduledFutureTask提供了任务执行状态的管理。它可以通过isDone()方法判断任务是否已完成通过isCancelled()方法判断任务是否已取消。
http://www.dnsts.com.cn/news/139643.html

相关文章:

  • 网站建设购物车有限责任公司最低注册资本多少钱
  • 做外贸网站流程做外贸网站价格
  • 商城网站设计说明书微信网站建设费记什么科目
  • 国外网站建设企业百度站长工具app
  • asp.net的网站开发网站设计毕业设计
  • vs2015 手机网站开发企业网站代码怎么优化
  • 个人网站做装修可以吗我的世界做皮肤壁纸网站
  • 西宁网站运营公司东台做网站找哪家好
  • 自适应网站用什么软件设计中企动力企业邮箱官网
  • 网站ps照片怎么做的网站制作一般收费
  • 织梦网站修改幻灯片上海装修找哪家公司好
  • 网站备案后 换服务器网站开发过程的需求分析
  • 做个一般的网站要多少钱企业网页制作推广
  • 可以用自己的电脑做网站吗网络科技工作室起名
  • 珠海网站建设推广方案西安seo网站建设
  • 上海网站建设 网站开中国建设造价协会网站
  • 春节网页设计素材网站企查查企业在线查询
  • 上街三屏网站建设企业网站推广技术
  • 厦门北京网站建设公司浏览器一打开就是2345网址导航
  • 衣服网站建设策划书做购物网站适合的服务器
  • 喜欢做木工 网站网上做分销代销哪个网站好
  • 龙川县建设网站建筑网站排行
  • 东营市报名系统网站设计公司软件开发文档管理规范
  • 计算机编程是做网站杭州微网站开发公司
  • 汕头网站关键词推广网站建设新手教程视频教程
  • 资溪做面包招聘的网站生物科技公司网站模板下载
  • 做网站 信科网络西宁网站建设开发
  • 做网站 需求wordpress文章列表排序
  • 网站的主要功能网站开发语言占有率
  • 建设网站的企业西安展厅设计公司