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

网站开发自学资料网站开发周记

网站开发自学资料,网站开发周记,公共服务平台官网,修改dns连接外国网站文章目录 一、工厂模式二、线程池2.1 什么是线程池2.2 Executor 工厂类创建线程池2.3 ThreadPoolExecutor类创建线程池 三、线程池的实现 一、工厂模式 在Java中#xff0c;工厂模式是一种创建对象的设计模式#xff0c;它通过提供一个共同的接口来实例化对象#xff0c;而… 文章目录 一、工厂模式二、线程池2.1 什么是线程池2.2 Executor 工厂类创建线程池2.3 ThreadPoolExecutor类创建线程池 三、线程池的实现 一、工厂模式 在Java中工厂模式是一种创建对象的设计模式它通过提供一个共同的接口来实例化对象而不暴露具体实现的细节。工厂模式可以帮助我们解耦对象的创建和使用提供了一种灵活的方式来创建对象。 在工厂模式中通常有一个抽象的工厂接口该接口定义了创建对象的方法。然后有一个或多个具体的工厂类实现这个接口每个工厂类负责创建一种具体类型的对象。 下面是一个简单的示例演示了在Java中如何使用工厂模式 首先我们定义一个抽象的产品接口 public interface Product {void doSomething(); }然后我们创建两个具体的产品类实现产品接口 public class ConcreteProduct1 implements Product {Overridepublic void doSomething() {System.out.println(ConcreteProduct1 do something);} }public class ConcreteProduct2 implements Product {Overridepublic void doSomething() {System.out.println(ConcreteProduct2 do something);} }接下来我们定义一个抽象的工厂接口 public interface Factory {Product createProduct(); }然后我们创建两个具体的工厂类实现工厂接口 public class ConcreteFactory1 implements Factory {Overridepublic Product createProduct() {return new ConcreteProduct1();} }public class ConcreteFactory2 implements Factory {Overridepublic Product createProduct() {return new ConcreteProduct2();} }最后我们可以使用工厂来创建具体的产品对象而不需要直接实例化具体的产品类 public class Main {public static void main(String[] args) {Factory factory1 new ConcreteFactory1();Product product1 factory1.createProduct();product1.doSomething();Factory factory2 new ConcreteFactory2();Product product2 factory2.createProduct();product2.doSomething();} }运行上述示例将会输出以下内容 ConcreteProduct1 do something ConcreteProduct2 do something这样我们通过工厂模式实现了创建产品对象的过程和具体产品的实现相分离客户端只需要通过工厂接口创建产品对象而不需要关心具体的产品类。这种设计模式使得系统更具有灵活性和可扩展性。 二、线程池 2.1 什么是线程池 线程池是Java中的一个重要概念它是一种管理和复用线程的机制。线程池维护着一个线程队列其中包含着多个准备好的线程。当有任务需要执行时线程池中的线程可以被分配来执行任务执行完成后又可以返回线程池以供下一次使用。 引入线程池的主要目的是为了提高系统的性能和资源利用率。以下是引入线程池的一些好处 减少线程创建和销毁的开销控制并发线程的数量提高响应速度和吞吐量提供线程管理和监控任务队列和调度策略 2.2 Executor 工厂类创建线程池 Java中的java.util.concurrent.Executors类提供了一个工厂方法来创建不同类型的线程池。这个工厂类提供了一些方便的方法来创建常见类型的线程池。以下是一些常用的线程池创建方法 FixedThreadPool固定大小线程池创建一个固定大小的线程池一旦线程池达到最大线程数量其他任务会等待。可以使用 Executors.newFixedThreadPool(int nThreads) 方法创建。 ExecutorService executor Executors.newFixedThreadPool(5); executor.submit(new MyTask()); // 提交任务给线程池执行 executor.shutdown(); // 关闭线程池CachedThreadPool缓存线程池根据需要创建新线程但如果有空闲线程则复用。如果线程空闲时间超过指定的时间默认为60秒则会被终止并从线程池中移除。可以使用 Executors.newCachedThreadPool() 方法创建。 ExecutorService executor Executors.newCachedThreadPool(); executor.submit(new MyTask()); // 提交任务给线程池执行 executor.shutdown(); // 关闭线程池SingleThreadExecutor单线程线程池只创建一个线程的线程池保证所有任务按顺序执行。可以使用 Executors.newSingleThreadExecutor() 方法创建。 ExecutorService executor Executors.newSingleThreadExecutor(); executor.submit(new MyTask()); // 提交任务给线程池执行 executor.shutdown(); // 关闭线程池newScheduledThreadPool(定时线程池)创建一个固定大小的线程池可用于执行定时任务和周期性任务。 ExecutorService executor Executors.newScheduledThreadPool(3); executor.submit(new MyTask()); // 提交任务给线程池执行 executor.shutdown(); // 关闭线程池这些线程池的使用方法类似通过 submit() 方法提交任务给线程池执行shutdown() 方法用于关闭线程池。可以根据实际需求选择适合的线程池类型并根据需要调整线程池的大小和配置。 2.3 ThreadPoolExecutor类创建线程池 Executors 本质上是对 ThreadPoolExecutor 类的封装ThreadPoolExecutor类是ExecutorService接口的实现它提供了更灵活的线程池创建和配置选项。通过使用ThreadPoolExecutor类可以自定义线程池的行为、线程数量、任务队列、拒绝策略等。 ThreadPoolExecutor 提供了更多的可选参数可以进一步细化线程池行为的设定以下是ThreadPoolExecutor类的构造函数及其说明 构造函数说明ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueueRunnable workQueue)创建一个线程池具有指定的核心线程数、最大线程数和任务队列使用默认的拒绝策略。ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueueRunnable workQueue, RejectedExecutionHandler handler)创建一个线程池具有指定的核心线程数、最大线程数、任务队列和拒绝策略。ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueueRunnable workQueue, ThreadFactory threadFactory)创建一个线程池具有指定的核心线程数、最大线程数、任务队列和线程工厂。线程工厂用于创建线程的实例。ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueueRunnable workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler)创建一个线程池具有指定的核心线程数、最大线程数、任务队列、线程工厂和拒绝策略。线程工厂用于创建线程的实例拒绝策略用于处理无法执行的任务。 注意上述构造函数中的参数含义如下 corePoolSize核心线程数表示线程池中保持活动状态的线程数量即使它们处于空闲状态。maximumPoolSize最大线程数表示线程池中允许存在的最大线程数量包括核心线程和非核心线程。keepAliveTime非核心线程的闲置超时时间当线程池中的线程数量超过核心线程数时多余的空闲线程会在指定的时间内被回收。unit闲置超时时间的单位例如TimeUnit.SECONDS表示以秒为单位。workQueue任务队列用于存储待执行的任务。threadFactory线程工厂用于创建线程的实例。handler拒绝策略表示当线程池和任务队列都已满时新提交的任务如何被拒绝执行。 AbortPolicy()超过负荷, 直接抛出异常。CallerRunsPolicy()调用者负责处理。DiscardOldestPolicy()丢弃队列中最老的任务。DiscardPolicy()丢弃新来的任务。 下面是使用ThreadPoolExecutor类创建线程池的示例 int corePoolSize 5; // 核心线程数 int maximumPoolSize 10; // 最大线程数 long keepAliveTime 60L; // 非核心线程的闲置超时时间 TimeUnit unit TimeUnit.SECONDS; // 闲置超时时间的单位 BlockingQueueRunnable workQueue new LinkedBlockingQueue(); // 任务队列 RejectedExecutionHandler handler new ThreadPoolExecutor.AbortPolicy(); // 拒绝策略ExecutorService executor new ThreadPoolExecutor(corePoolSize,maximumPoolSize,keepAliveTime,unit,workQueue,handler ); 三、线程池的实现 创建一个简单的线程池 // 自定义线程池 class MyThreadPool{// 任务队列private BlockingQueueRunnable queue new LinkedBlockingQueue();// n 表示线程池数量public MyThreadPool(int n){// 创建n个线程for (int i 0; i n; i) {Thread t new Thread(() - {while (true){try {Runnable runnable queue.take();runnable.run();} catch (InterruptedException e) {e.printStackTrace();}}});t.start();}}// 注册任务给线程池public void submit(Runnable runnable){try {queue.put(runnable);} catch (InterruptedException e) {e.printStackTrace();}} }以上代码展示了一个简单的自定义线程池实现。该自定义线程池类名为MyThreadPool通过构造函数传入线程池数量n并使用一个BlockingQueue作为任务队列来存储待执行的任务。在构造函数中创建了n个线程并在每个线程中使用一个循环来不断从任务队列中取出任务并执行。submit()方法用于向线程池提交任务将任务放入任务队列中。
http://www.pierceye.com/news/898717/

相关文章:

  • 广西庆海建设发展有限公司网站昆山有做网站的公司吗
  • 前端课程网站wordpress 微博登陆
  • asp怎么做网站适配开发公司安置房项目工程推进大会
  • 学做网站可以赚钱吗怎么批量修改wordpress文章内容
  • 写作网站vir上海博大园林建设发展有限公司网站
  • wordpress video gallery网站代码优化怎么做
  • 厦门网站设计品牌企业互联网门户网站建设
  • 做名片模板网站中文响应式网站
  • 用tornado做网站石家庄 外贸网站建设公司
  • 档案网站建设网页wordpress keyshot
  • 鞍山制作网站哪家好建设银行员工网站
  • 手机怎么提升网站流量品牌型网站成功案例图片
  • 网站视频主持人制作网站开发 质量管理
  • 网站的外链建设计划石家庄市城乡建设部网站
  • 电子商务网站规划与建设论文电子商务营销方法
  • 宁波做网站费用电子商城开发网站开发
  • 太原市住房和城乡建设部网站免费的logo在线设计
  • 做it的在哪个网站找工作wordpress 幻燈片 插件
  • 湘潭做网站 i磐石网络博学网站建设公司
  • 揭阳市建设发展总公司网站自己做的视频网站如何赚钱
  • 泉州自助建站软件天眼查在线查询官网
  • 网站建设书模板校本教研网站建设方案
  • 经销商自己做网站合适吗彩虹网站建设
  • 网站新闻编辑怎么做网站开发人员 组织架构
  • 重庆网站seo诊断婚纱摄影网站模板下载
  • 老板合作网站开发宁波网站建设慕枫科技
  • 做外贸都有哪些好网站河北沙河市规划局或建设局网站
  • 网站设计建设维护专门做网站的app
  • 哈尔滨建站模板大全慈溪高端网站设计
  • 升阳广州做网站公司门户网站建设存在的问题和差距