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

网站手机端页面怎么做的一个主体可以备案几个网站

网站手机端页面怎么做的,一个主体可以备案几个网站,个人微信公众号收费吗,灵璧做网站的公司一 使用线程池的好处 池化技术相比大家已经屡见不鲜了,线程池、数据库连接池、Http 连接池等等都是对这个思想的应用。池化技术的思想主要是为了减少每次获取资源的消耗,提高对资源的利用率。 线程池提供了一种限制和管理资源(包括执行一个任…

一 使用线程池的好处

池化技术相比大家已经屡见不鲜了,线程池、数据库连接池、Http 连接池等等都是对这个思想的应用。池化技术的思想主要是为了减少每次获取资源的消耗,提高对资源的利用率。

 

线程池提供了一种限制和管理资源(包括执行一个任务)。 每个线程池还维护一些基本统计信息,例如已完成任务的数量。

这里借用《Java 并发编程的艺术》提到的来说一下使用线程池的好处

  • 降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。
  • 提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。
  • 提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。

二、线程池的核心参数

corePoolSize 线程池核心线程大小

maximumPoolSize 线程池最大线程数量

keepAliveTime 空闲线程存活时间

unit 空闲线程存活时间单位

workQueue 工作队列

threadFactory 线程工厂

handler 拒绝策略

 三、Runnable和ThreadPoolExecutor的使用

1.首先创建一个 Runnable 接口的实现类(当然也可以是 Callable 接口,我们上面也说了两者的区别。)MyRunnable.java

package com.newstart.controller;import java.util.Date;public class MyRunnable implements Runnable{private String command;public MyRunnable(String s) {this.command = s;}@Overridepublic void run() {System.out.println(Thread.currentThread().getName() + " Start. Time = " + new Date());processCommand();System.out.println(Thread.currentThread().getName() + " End. Time = " + new Date());}private void processCommand() {try {Thread.sleep(5000);} catch (InterruptedException e) {e.printStackTrace();}}@Overridepublic String toString() {return this.command;}
}

2.编写测试程序,我们这里以阿里巴巴推荐的使用 ThreadPoolExecutor 构造函数自定义参数的方式来创建线程池。ThreadPoolExecutorDemo.java

package com.newstart.controller;import java.util.concurrent.*;public class ThreadPoolExecutorDemo {private static final int CORE_POOL_SIZE = 5;private static final int MAX_POOL_SIZE = 10;private static final int QUEUE_CAPACITY = 100;private static final Long KEEP_ALIVE_TIME = 1L;public static void main(String[] args) throws InterruptedException {//使用阿里巴巴推荐的创建线程池的方式//通过ThreadPoolExecutor构造函数自定义参数创建ThreadPoolExecutor executor = new ThreadPoolExecutor(CORE_POOL_SIZE,MAX_POOL_SIZE,KEEP_ALIVE_TIME,TimeUnit.SECONDS,new ArrayBlockingQueue<>(QUEUE_CAPACITY),new ThreadPoolExecutor.CallerRunsPolicy());for (int i=0;i<10;i++){//创建WorkerThread对象(WorkerThread类实现了Runnable 接口)Runnable worker = new MyRunnable("" + i);//执行Runnableexecutor.execute(worker);}//终止线程池executor.shutdown();while (!executor.isTerminated()) {}System.out.println("Finished all threads");}
}

四、使用Callable和和ThreadPoolExecutor的使用

1.首先创建一个 Callable 接口的实现类MyCallable.java

package com.newstart.controller;import java.util.Date;
import java.util.concurrent.Callable;public class MyCallble implements Callable {private String command;public MyCallble(String s) {this.command = s;}private void processCommand() {try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}}@Overridepublic String toString() {return this.command;}@Overridepublic Object call() throws Exception {System.out.println(Thread.currentThread().getName() + " Start. Time = " + new Date());processCommand();System.out.println(Thread.currentThread().getName() + " End. Time = " + new Date());return Thread.currentThread().getName();}
}

2.编写测试程序,我们这里以阿里巴巴推荐的使用 ThreadPoolExecutor 构造函数自定义参数的方式来创建线程池。ThreadPoolExecutorDemo.java

package com.newstart.controller;import java.util.concurrent.*;public class ThreadPoolExecutorDemo {private static final int CORE_POOL_SIZE = 5;private static final int MAX_POOL_SIZE = 10;private static final int QUEUE_CAPACITY = 100;private static final Long KEEP_ALIVE_TIME = 1L;public static void main(String[] args) throws InterruptedException {//使用阿里巴巴推荐的创建线程池的方式//通过ThreadPoolExecutor构造函数自定义参数创建ThreadPoolExecutor executor = new ThreadPoolExecutor(CORE_POOL_SIZE,MAX_POOL_SIZE,KEEP_ALIVE_TIME,TimeUnit.SECONDS,new ArrayBlockingQueue<>(QUEUE_CAPACITY),new ThreadPoolExecutor.CallerRunsPolicy());for (int i=0;i<10;i++){//创建WorkerThread对象(WorkerThread类实现了Runnable 接口)Callable worker = new MyCallble("" + i);//执行RunnableFuture future = executor.submit(worker);Thread.sleep(1000);System.out.println(future.isDone());}//终止线程池executor.shutdown();while (!executor.isTerminated()) {}System.out.println("Finished all threads");}
}

Callable和Runnable的区别:

Runnable无返回值

Callable有返回值,并且可以抛出异常

在线程池中:

对于Callable接口需要使用submit执行,并且返回值为future,通过future的isdone方法可以判断线程是否执行完毕

对于Runnable接口需要使用execute执行

 shutdown()和 shutdownNow()的区别

  • shutdown() :关闭线程池,线程池的状态变为 SHUTDOWN。线程池不再接受新任务了,但是队列里的任务得执行完毕。
  • shutdownNow() :关闭线程池,线程的状态变为 STOP。线程池会终止当前正在运行的任务,并停止处理排队的任务并返回正在等待执行的 List。

 

http://www.yayakq.cn/news/738911/

相关文章:

  • 济南做设计公司网站大连企业查询
  • 安徽芜湖网站建设微商城网站策划
  • 手机网站导航设计模板网站开发 文献综述
  • 笑话网站html模板做网站需准备些什么软件
  • php网站开发实验报告龙岩网络三剑客
  • 网站建设制作方案建设网站多久
  • 网站建设方案如何写郑州小程序开发哪家好
  • 辽宁建设银行企业银行官方网站网站建设6135678
  • 虚拟主机网站被挂马网站举报官网
  • 建设部继续教育网站网站建设考试知识点
  • 网站开发无形资产新品推广计划与方案
  • 营销型网站的建设与推广辅导记录网站开发算法
  • 湖南做网站 搜搜磐石网络上住房和城乡建设部网站
  • 网站开发工作容易出现的失误wordpress批量增加文章
  • 高端网站建设公司联系电话拟定一个物流网站的建设方案
  • 东营市做网站中关村在线app
  • 在线网站优化wordpress主题修改图片
  • 示范高校建设网站网站免费制作
  • 单位网站建设框架网站建设运营培训总结
  • 网站建设维护有哪些内容网站开发语言学习C 吗
  • 网站建设设计师招募揭阳手机网站建设
  • 怎么找做网站的公司北京制作手机网站
  • 环保网站建设公司哪家好网站浏览历史记录恢复方法是什么
  • 英文网站 正文字体大小企业网站备案那么麻烦吗
  • 北京网站制作的现在都用什么软件搜索附近的人
  • 电脑有固定IP 做网站建筑师培训
  • 怎么做网站记者商品网站建设格式
  • 吴兴区建设局网站福建建设执业中心网站
  • 汕头站扩建后比哪个站大国产免费crm系统有哪些
  • 深圳网站建设软件开发公司排名山东住房与城乡建设部网站