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

跨国网站怎么给公司做网站推广

跨国网站,怎么给公司做网站推广,网站建设不是一次性费用,淘宝客导购网站怎么建设线程池 Java 线程池是一种多线程处理技术#xff0c;它可以在程序中预先创建一定数量的线程#xff0c;将任务提交到线程池中#xff0c;线程池会自动调度线程执行任务。通过使用线程池#xff0c;可以避免反复创建和销毁线程的开销#xff0c;提高程序性能#xff0c;同…线程池 Java 线程池是一种多线程处理技术它可以在程序中预先创建一定数量的线程将任务提交到线程池中线程池会自动调度线程执行任务。通过使用线程池可以避免反复创建和销毁线程的开销提高程序性能同时也能够避免线程资源的浪费和过度使用。 为什么使用线程池 在并发环境下系统不能够确定在任意时刻中有多少任务需要执行有多少资源需要投入。这种不确定性将带来以下若干问题 1、频繁申请/销毁资源和调度资源将带来额外的消耗可能会非常巨大。 2、对资源无限申请缺少抑制手段易引发系统资源耗尽的风险。 3、系统无法合理管理内部的资源分布会降低系统的稳定性。 Java 线程池的主要优势包括 1、重用线程线程池中的线程可以被重复利用避免了创建和销毁线程的开销提高了程序的性能。 2、提高程序的响应速度当有任务到来时线程池中已经有了准备好的线程可以立即处理任务而不需要等待线程的创建。 3、提高资源利用率由于线程的创建和销毁是一项昂贵的操作使用线程池可以避免不必要的资源浪费。 Java线程池涉及内容 java中涉及到线程池的相关类均在jdk1.5开始的java.util.concurrent包中涉及到的几个核心类及接口包括Executor、Executors、ExecutorService、ThreadPoolExecutor、FutureTask、Callable、Runnable等。 这些接口和类都是Java中用于实现线程池的核心组件它们的作用如下 1、Executor 接口定义了一种将任务提交与任务执行分离的标准方式它只有一个方法 execute(Runnable command)用于执行传入的任务。 2、Executors 类是一个工厂类提供了创建各种类型线程池的静态工厂方法。例如newFixedThreadPool(int nThreads) 方法可以创建一个固定大小的线程池。 3、ExecutorService 接口继承自 Executor 接口提供了更加丰富的任务执行管理方法例如可以通过 submit(Callable task) 方法提交一个有返回值的任务并返回一个 Future 对象来表示任务的执行结果。 4、ThreadPoolExecutor 类是一个线程池的具体实现实现了 ExecutorService 接口。它可以根据需要自动调整线程池中的线程数量以满足当前任务的需求。 5、FutureTask 类表示一个异步计算任务它实现了 RunnableFuture 接口可以在执行完成后返回一个结果。它可以被提交给 Executor 或 ExecutorService 进行执行。 6、Callable 接口类似于 Runnable 接口但它可以返回一个值并且可以抛出异常。 7、Runnable 接口表示一个可以被执行的任务。 Java线程池通常由以下四个组件组成 任务队列用于存放需要执行的任务。 线程池管理器用于创建、销毁线程池并控制线程池的状态。 工作线程实际执行任务的线程。 任务需要执行的具体业务逻辑。 线程池的创建及重要参数 Java 线程池的实现主要通过 Executor 框架提供的线程池接口实现。常用的线程池类型包括 1、FixedThreadPool固定大小的线程池可以控制并发线程的数量。 2、CachedThreadPool可以根据需要创建新的线程但在可用线程的数量超过处理需求时线程池会回收空闲的线程。 3、ScheduledThreadPool用于执行周期性任务和延迟任务支持定时执行任务和循环执行任务。 4、SingleThreadExecutor只有一个工作线程的线程池可以保证所有的任务按照指定的顺序在一个线程中执行。 public static ExecutorService newFixedThreadPool(int var0) {return new ThreadPoolExecutor(var0, var0, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue());}public static ExecutorService newSingleThreadExecutor() {return new Executors.FinalizableDelegatedExecutorService(new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue()));}public static ExecutorService newCachedThreadPool() {return new ThreadPoolExecutor(0, 2147483647, 60L, TimeUnit.SECONDS, new SynchronousQueue());}public static ScheduledExecutorService newScheduledThreadPool(int var0) {return new ScheduledThreadPoolExecutor(var0);}Java中的线程池核心实现类是ThreadPoolExecutor。 public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueueRunnable workQueue,ThreadFactory threadFactory,RejectedExecutionHandler handler) {……}使用线程池的关键是合理地配置线程池的参数例如线程池的大小、任务队列的大小、线程的超时时间等。如果线程池的参数设置不当可能会导致线程池中的线程数量不足或者过多从而影响程序的性能。 ThreadPoolExecutor实现的顶层接口是Executor顶层接口Executor提供了一种思想将任务提交和任务执行进行解耦。用户无需关注如何创建线程如何调度线程来执行任务用户只需提供Runnable对象将任务的运行逻辑提交到执行器(Executor)中由Executor框架完成线程的调配和任务的执行部分。ExecutorService接口增加了一些能力1扩充执行任务的能力补充可以为一个或一批异步任务生成Future的方法2提供了管控线程池的方法比如停止线程池的运行。AbstractExecutorService则是上层的抽象类将执行任务的流程串联了起来保证下层的实现只需关注一个执行任务的方法即可。最下层的实现类ThreadPoolExecutor实现最复杂的运行部分ThreadPoolExecutor将会一方面维护自身的生命周期另一方面同时管理线程和任务使两者良好的结合从而执行并行任务。 ThreadPoolExecutor是如何运行如何同时维护线程和执行任务的呢其运行机制如下图所示 corePoolSize核心线程数也是线程池中常驻的线程数线程池初始化时默认是没有线程的当任务来临时才开始创建线程去执行任务 maximumPoolSize最大线程数在核心线程数的基础上可能会额外增加一些非核心线程需要注意的是只有当workQueue队列填满时才会创建多于corePoolSize的线程(线程池总线程数不超过maxPoolSize) keepAliveTime非核心线程的空闲时间超过keepAliveTime就会被自动终止回收掉注意当corePoolSizemaxPoolSize时keepAliveTime参数也就不起作用了(因为不存在非核心线程) unitkeepAliveTime的时间单位 workQueue用于保存任务的队列可以为无界、有界、同步移交三种队列类型之一当池子里的工作线程数大于corePoolSize时这时新进来的任务会被放到队列中 threadFactory创建线程的工厂类默认使用Executors.defaultThreadFactory()也可以使用guava库的ThreadFactoryBuilder来创建 handler线程池无法继续接收任务(队列已满且线程数达到maximunPoolSize)时的饱和策略取值有AbortPolicy、CallerRunsPolicy、DiscardOldestPolicy、DiscardPolicy workQueue队列 SynchronousQueue(同步移交队列)队列不作为任务的缓冲方式可以简单理解为队列长度为零 LinkedBlockingQueue(无界队列)队列长度不受限制当请求越来越多时(任务处理速度跟不上任务提交速度造成请求堆积)可能导致内存占用过多或OOM ArrayBlockintQueue(有界队列)队列长度受限当队列满了就需要创建多余的线程来执行任务 handler拒绝策略 AbortPolicy中断抛出异常 DiscardPolicy默默丢弃任务不进行任何通知 DiscardOldestPolicy丢弃掉在队列中存在时间最久的任务 CallerRunsPolicy让提交任务的线程去执行任务(对比前三种比较友好一丢丢) 关闭线程池 shutdownNow()立即关闭线程池(暴力)正在执行中的及队列中的任务会被中断同时该方法会返回被中断的队列中的任务列表 shutdown()平滑关闭线程池正在执行中的及队列中的任务能执行完成后续进来的任务会被执行拒绝策略 isTerminated()当正在执行的任务及对列中的任务全部都执行清空完就会返回true springboot使用线程池 /*** Description 配置类中构建线程池实例方便调用*/ Configuration public class ThreadPoolConfig {Bean(value threadPoolInstance)public ExecutorService createThreadPoolInstance() {//通过guava类库的ThreadFactoryBuilder来实现线程工厂类并设置线程名称ThreadFactory threadFactory new ThreadFactoryBuilder().setNameFormat(thread-pool-%d).build();ExecutorService threadPool new ThreadPoolExecutor(10, 16, 60L, TimeUnit.SECONDS, new ArrayBlockingQueueRunnable(100), threadFactory, new ThreadPoolExecutor.AbortPolicy());return threadPool;} }//通过namethreadPoolInstance引用线程池实例Resource(name threadPoolInstance)private ExecutorService executorService;Overridepublic void spikeConsumer() {//TODOexecutorService.execute(new Runnable() {Overridepublic void run() {//TODO}});}.其它相关 在ThreadPoolExecutor类中有两个比较重要的方法引起了我们的注意beforeExecute和afterExecute protected void beforeExecute(Thread var1, Runnable var2) {}protected void afterExecute(Runnable var1, Throwable var2) { }
http://www.yutouwan.com/news/100217/

相关文章:

  • 农机网站建设目标随申行是国企嘛?
  • 用python做网站优点网站人多怎么优化
  • wordpress易语言seo推广培训费用
  • 网站流量评价有哪几方面撰写网络推广策划案
  • 网站调研方法有哪些内容wordpress编辑新页面
  • 永川网站建设熊掌号网站建设情况存在问题
  • 上海高端网站花蝴蝶免费视频在线观看高清版
  • 在哪注册网站一个做智能化的网站有哪些
  • 建设网站设计论文范文宁波免费自助建站模板
  • 福清市建设局网站网站可以多个域名吗
  • 什么网站做博客好如何做表白网站的教程
  • 长安营销服务协同管理平台网站ps怎么网站首页
  • 网站开发名词解释室内设计效果图一套
  • 济南做网站建设公司新乡网站开发的公司
  • 做网站备案实名需要钱吗长垣建设银行网站
  • 中小型网站建设 教案微信代运营公司有哪些
  • 西安响应式网站开发金戈枸橼酸西地那非片
  • 成都建设网站专业公司电子游戏十大正规官方网址
  • 建设企业网站公司网络举报网站
  • 企业官网模板站网站制作公司怎么看
  • 广州专业网站优化公司怎么建设菠菜网站
  • 莱芜网站网站建设引流人脉推广软件
  • 刘家窑网站建设51我们一起做网站
  • 优秀图网站青岛知名设计公司
  • 西安哪些做网站的公司好专做生存设计的网站
  • 电子书新手学做网站公司网站二维码生成器
  • 网站个人备案模版wordpress安装通知栏
  • 湖南长沙网站建设公司网建会
  • 深圳建设银行官方网站什么是开放式的网站
  • 甘肃网站建设方案服务至上如何提网站建设需求