电子商务网站建设与管理期末试卷东莞网站推广哪里找
- 作者: 五速梦信息网
- 时间: 2026年03月21日 11:24
当前位置: 首页 > news >正文
电子商务网站建设与管理期末试卷,东莞网站推广哪里找,wordpress中文企业模板,网站做app系列文章目录
第一章 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();
总结 就是被拒绝的任务直接在主线程中运行不再进入线程池。
相关文章
-
电子商务网站建设与管理课件网站制作公司兴田德润怎么联系
电子商务网站建设与管理课件网站制作公司兴田德润怎么联系
- 技术栈
- 2026年03月21日
-
电子商务网站建设与管理课后题wordpress 本机安装目录
电子商务网站建设与管理课后题wordpress 本机安装目录
- 技术栈
- 2026年03月21日
-
电子商务网站建设与管理读书心得网站建设费用的账务处理
电子商务网站建设与管理读书心得网站建设费用的账务处理
- 技术栈
- 2026年03月21日
-
电子商务网站建设与管理实训内容答案WordPress 收款方案
电子商务网站建设与管理实训内容答案WordPress 收款方案
- 技术栈
- 2026年03月21日
-
电子商务网站建设与管理王生春vs怎么做网站
电子商务网站建设与管理王生春vs怎么做网站
- 技术栈
- 2026年03月21日
-
电子商务网站建设与规划案例杭州搜索引擎推广
电子商务网站建设与规划案例杭州搜索引擎推广
- 技术栈
- 2026年03月21日






