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

商务网站建设体会关键词优化公司推荐

商务网站建设体会,关键词优化公司推荐,中国商业企业网,优质校建设专题网站系列文章目录 第一章 Java线程池技术应用 文章目录 系列文章目录[TOC](文章目录) 前言1、Java创建线程方式回顾1.1、继承Thread类(只运行一次)1.1.1、改造成主线程常驻#xff0c;每秒开启新线程运行1.1.2、匿名内部类1.1.3、缺点1.1.4、扩展知识#xff1a;Java内部类1.1.4…系列文章目录 第一章 Java线程池技术应用 文章目录 系列文章目录[TOC](文章目录) 前言1、Java创建线程方式回顾1.1、继承Thread类(只运行一次)1.1.1、改造成主线程常驻每秒开启新线程运行1.1.2、匿名内部类1.1.3、缺点1.1.4、扩展知识Java内部类1.1.4.1、静态内部类1.1.4.2、匿名内部类 1.2、实现Runnable接口1.2.1、普通类实现Runnable接口1.2.2、匿名方式创建Runnable实现类1.2.3、使用Lambda方式创建匿名Runnable类1.2.4、缺点1.2.5、扩展Lambda表达式 1.3、实现Callable接口1.3.1、普通类实现Callable接口 2、线程池2.1、五种创建线程的方式2.2、new ThreadPoolExecutor()创建线程2.2.1、拒绝策略 前言 介绍Java的线程、线程池等操作 1、Java创建线程方式回顾 1.1、继承Thread类(只运行一次) public class ThreadTest extends Thread{Overridepublic void run() {System.out.println(Thread.currentThread().getName());}public static void main(String[] args) {new ThreadTest().start();} }1.1.1、改造成主线程常驻每秒开启新线程运行 import java.util.Date;Slf4j public class ThreadTest extends Thread{Overridepublic void run() {log.info(线程名称{} , 当前时间{} , Thread.currentThread().getName() , new Date().getTime() );}public static void main(String[] args) {while (true) {try {new ThreadTest().start();Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}log.info(主线程常驻);}}}1.1.2、匿名内部类 import lombok.extern.slf4j.Slf4j;Slf4j public class ThreadTest extends Thread{public static void main(String[] args) {Thread thread new Thread() {Overridepublic void run() {log.info(Hello {} , world);}};thread.start();}}1.1.3、缺点 继承了Thread类之后就不能继承其他类 1.1.4、扩展知识Java内部类 成员内部类外部类内部使用外部类外部使用 import lombok.extern.slf4j.Slf4j;Slf4j public class Outer {public static void main(String[] args) {Inner inner new Outer().initTest();log.info(inner.innerTest());}public Inner initTest(){Inner inner new Inner();return inner;}class Inner{public Inner(){}public Inner(String s){}public String innerTest(){return Inner Hello world;}} } 1.1.4.1、静态内部类 import lombok.extern.slf4j.Slf4j;Slf4j public class Outer {public static void main(String[] args) {Inner inner new Inner();log.info(inner.innerTest());}public void initTest(){Inner inner new Inner();}static class Inner{public Inner(){}public Inner(String s){}public String innerTest(){return Inner Hello world;}} }1.1.4.2、匿名内部类 import lombok.extern.slf4j.Slf4j;Slf4j public class Outer {public static void main(String[] args) {Outer outer new Outer();outer.sayHello();}public void sayHello(){IMessage iMessage new IMessage() {//匿名类Overridepublic String sayHello() {return Hello world;}};log.info(iMessage.sayHello());}interface IMessage{String sayHello();}} 1.2、实现Runnable接口 1.2.1、普通类实现Runnable接口 import lombok.extern.slf4j.Slf4j;Slf4j public class StatSales implements Runnable{Overridepublic void run() {log.info(统计销量);}public static void main(String[] args) {Thread thread new Thread() {Overridepublic void run() {log.info(Hello world);}};thread.start();} }1.2.2、匿名方式创建Runnable实现类 public static void main(String[] args) {Runnable runnable new Runnable() {Overridepublic void run() {System.out.println(统计成绩);}};new Thread(runnable).start();}1.2.3、使用Lambda方式创建匿名Runnable类 // 使用 Lambda 匿名 Runnable 方式 Thread t3 new Thread(() - { //添加业务方法… }); // 启动线程 t3.start(); public static void main(String[] args) {Thread thread new Thread(() - {System.out.println(统计平均寿命);});thread.start(); }1.2.4、缺点 不能获得程序的执行结果 1.2.5、扩展Lambda表达式 把函数作为一个方法的参数 表达式语法 (parameters) - expression 或 (parameters) -{ statements; } 说明 可选类型声明不需要声明参数类型编译器可以统一识别参数值。可选的参数圆括号一个参数无需定义圆括号但多个参数需要定义圆括号。可选的大括号如果主体包含了一个语句就不需要使用大括号。可选的返回关键字如果主体只有一个表达式返回值则编译器会自动返回值大括号需要指定表达式返回了一个数值。举例 // 1. 不需要参数,返回值为 5 () - 5 // 2. 接收一个参数(数字类型),返回其2倍的值 x - 2 * x // 3. 接受2个参数(数字),并返回他们的差值 (x, y) - x – y // 4. 接收2个int型整数,返回他们的和 (int x, int y) - x y // 5. 接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void) (String s) - System.out.print(s)1.3、实现Callable接口 FutureTaskCallable 1.3.1、普通类实现Callable接口 public class StatScore implements CallableDouble {Overridepublic Double call() throws Exception {//统计分数的逻辑return 88.98;} }public static void main(String[] args) throws ExecutionException, InterruptedException {StatScore statScore new StatScore();//跟FutureTask 关联上FutureTaskDouble doubleFutureTask new FutureTask(statScore);//跟Thread关联上Thread thread new Thread(doubleFutureTask);thread.start();log.info(String.valueOf(doubleFutureTask.get()));}2、线程池 线程池就是存放线程的池子池子里存放了很多可以复用的线程。 使用线程池的优势 提高效率创建好一定数量的线程放在池中等需要使用的时候就从池中拿一个这要比需要的时候创建一个线程对象要快的多。减少了创建和销毁线程的次数每个工作线程都可以被重复利用可执行多个任务。提升系统响应速度假如创建线程用的时间为T1执行任务用的时间为T2,销毁线程用的时间为T3那么使用线程池就免去了T1和T3的时间 2.1、五种创建线程的方式 //创建一个单线程池它只会用唯一的工作线程来执行任务保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行 ExecutorService executorService Executors.newSingleThreadExecutor(); //创建一个定长的线程池可控制最大并发数超出的线程进行队列等待。 ExecutorService executorService Executors.newFixedThreadPool(2); //可以创建定长的、支持定时任务周期任务执行。 ExecutorService executorService Executors.newScheduledThreadPool(2); //创建一个可以缓存的线程池如果线程池长度超过处理需要可以灵活回收空闲线程没回收的话就新建线程 ExecutorService executorService Executors.newCachedThreadPool(); //创建一个具有抢占式操作的线程池 ExecutorService executorService Executors.newWorkStealingPool(); 2.2、new ThreadPoolExecutor()创建线程 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueueRunnable workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler)参数说明 参数含义解释corePoolSize该线程池中核心线程数最大值核心线程生命周期无限即使空闲也不会死亡maximumPoolSize线程总数最大值任务队列满了以后当有新任务进来则会增加一个线程来处理新任务线程总数maximumPoolSize keepAliveTime闲置超时时间当线程数大于核心线程数时超过keepAliveTime时间将会回收非核心线程unitkeepAliveTime 的单位workQueue线程池中的任务队列*threadFactory为线程池提供创建新线程的线程工厂*RejectedExecutionHandler饱和策略抛出异常专用当队列和最大线程池都满了之后的饱和策略。 2.2.1、拒绝策略 ThreadPoolExecutor的饱和策略可以通过调用setRejectedExecutionHandler来修改。JDK提供了几种不同的RejectedExecutionHandler实现每种实现都包含有不同的饱和策略AbortPolicy、CallerRunsPolicy、DiscardPolicy和DiscardOldestPolicy。 拒绝策略如下 CallerRunsPolicy : 调用线程处理任务AbortPolicy : 抛出异常DiscardPolicy : 直接丢弃DiscardOldestPolicy : 丢弃队列中最老的任务执行新任务 RejectedExecutionHandler rejected null;//默认策略阻塞队列满则丢任务、抛出异常rejected new ThreadPoolExecutor.AbortPolicy();//阻塞队列满则丢任务不抛异常rejected new ThreadPoolExecutor.DiscardPolicy();//删除队列中最旧的任务最早进入队列的任务尝试重新提交新的任务rejected new ThreadPoolExecutor.DiscardOldestPolicy();//队列满不丢任务不抛异常若添加到线程池失败那么主线程会自己去执行该任务rejected new ThreadPoolExecutor.CallerRunsPolicy(); 总结 就是被拒绝的任务直接在主线程中运行不再进入线程池。
http://www.hkea.cn/news/14421518/

相关文章:

  • 商城网站建设服务简述网络营销的意义
  • 做移动网站建设电商网站项目经验介绍
  • seo两个域名一个网站有影响吗重庆巴南网站制作
  • wordpress直播网站主题沈阳市建设工程质量检测中心网站
  • 制作地图的网站现有的网站开发技术
  • 做app必须有网站吗wordpress阿里云esc
  • 网站图片动态换名店面设计平面图
  • 朝青板块网站建设娄星区建设局网站
  • 企业网站导航设计代理主要干什么
  • 备案网站注意事项做机械配件的网站
  • 做相同网站违法吗荆门seo
  • 百度网站打开linux wordpress路径
  • 微网站怎么做百度关键词排名seo关键词排名优化教程
  • 男的做直播哪个网站好用vs2013做网站案例
  • 网站建设方向论文提纲全国工商登记网
  • 皋兰县城乡和住房建设局网站太原网站定制
  • 关于网站设计的论文高端的佛山网站建设
  • 网站找百度做可以嘛最新联播新闻
  • 山东省住房城乡建设部网站网站平台定制开发
  • wordpress底部导航栏seo推广专员招聘
  • 保山网站建设优化北京软件设计公司
  • wordpress模板页面怎么添加图片seo的中文含义是什么
  • 加网络网站建设工作室wordpress目录页面
  • 做网站的回扣sem账户托管公司
  • 都有什么公司需要网站建设国内免费的ip地址
  • 图片手机网站建设提供购物网站建设
  • 国际空间站vs中国空间站十大舆情网站
  • 旅游手机网站建设智慧旅游推广引流系统
  • 广州网站建设信科分公司四川省建设厅职称评审网站
  • 不用开源程序怎么做网站品牌建设对策