网站建设与管理课程实训怎么做自己网站产品seo

张小明 2026/1/19 19:17:45
网站建设与管理课程实训,怎么做自己网站产品seo,腾飞网站建设,企业网站维护合同目录 1.线程的概念 2.进程和线程的对比 3.线程创建的三种方式 1)继承Thread类 2)实现Runnable接口 3)实现Callable接口 三种方法的执行流程 1.线程的概念 线程是程序执行流的最小单位#xff0c;是进程中的一个独立执行单元。一个进程可以包含多个线程#xff0c;这些…目录1.线程的概念2.进程和线程的对比3.线程创建的三种方式1)继承Thread类2)实现Runnable接口3)实现Callable接口三种方法的执行流程1.线程的概念线程是程序执行流的最小单位是进程中的一个独立执行单元。一个进程可以包含多个线程这些线程共享进程的资源但各自独立执行。2.进程和线程的对比3.线程创建的三种方式1)继承Thread类/** * 第一种创建线程的方式继承Thread类 * 优点代码简单 * 缺点单继承的局限性不能再继承其他的类 */ public class Demo1 { public static void main(String[] args) { Thread myThread new MyThread(); myThread.start(); for (int i 0; i 6; i) { System.out.println(main方法输出 i); } } } class MyThread extends Thread { public void run() { for (int i 0; i 6; i) { System.out.println(子线程输出: i); } } }继承关系MyThread extends Thread重写方法必须重写 run() 方法启动方式创建对象后调用 start() 方法执行机制start() 会启动新线程同时调用 run() 方法直接调用 run() 只会普通方法调用不会创建新线程输出结果特点主线程和子线程的输出会交替出现顺序不确定2)实现Runnable接口/** * 第二种创建线程的方式实现Runnable接口 * 优点只是实现了接口可以继承其他类实现其他接口拓展性强 * 缺点需要多一个Runnable对象 */ public class Demo2 { // 目标掌握多线程的第二种创建方式实现runnable接口 public static void main(String[] args) { //3.创建线程对象要把这个线程任务类包装成线程类把这个对象交给线程去处理 Thread MyRunnable new Thread(new MyRunnable()); MyRunnable.start(); for (int i 0; i 6; i) { System.out.println(Main方法输出: i); } } } //1.定义一个线程任务类来实现Runnable接口 class MyRunnable implements Runnable { //2.重写run方法执行线程任务 Override public void run() { for (int i 0; i 6; i) { System.out.println(子线程输出: i); } } }实现关系MyRunnable implements Runnable重写方法必须实现 run() 方法线程创建需要将 Runnable 对象传给 Thread 构造器优点避免单继承限制适合多个线程执行相同任务代码结构更清晰简化写法1.匿名内部类/** * 线程创建的第二种方法的匿名内部类写法 */ public class Demo3 { public static void main(String[] args) { // 使用匿名内部类创建Runnable对象 Thread t1 new Thread(new Runnable(){ Override public void run() { for (int i 0; i 6; i) { System.out.println(子线程输出: i); } } }); t1.start(); for (int i 0; i 6; i) { System.out.println(Main方法输出: i); } } }2.lambda表达式// Java 8 可以使用Lambda表达式进一步简化 public class Demo2_Lambda { public static void main(String[] args) { // 使用Lambda表达式创建Runnable对象 Thread thread new Thread(() - { for (int i 0; i 6; i) { System.out.println(子线程输出: i); } }); thread.start(); for (int i 0; i 6; i) { System.out.println(Main方法输出: i); } } }3)实现Callable接口import java.util.concurrent.Callable; import java.util.concurrent.FutureTask; /** * 前面两种创建方式重写的run方法都不能直接返回结果 * JDK5.0提供了Callable接口和FutureTask类来实现 * 第三种创建方式 */ public class Demo4 { public static void main(String[] args) { // 创建Callable接口的实现类对象 CallableString c new MyCallable(100); // 4. 把Callable对象封装成真正的线程任务对象FutureTask对象 FutureTaskString ft new FutureTask(c); /** * FutureTask对象的作用 * a. 本质是一个Runnable线程任务对象可以交给Thread线程对象处理 * b. 可以获取线程执行完毕后的结果 */ // 5. 把FutureTask对象作为参数传递给Thread对象 Thread thread new Thread(ft); thread.start(); // 启动线程 // 创建第二个线程 CallableString c1 new MyCallable(300); FutureTaskString ft1 new FutureTask(c1); Thread thread1 new Thread(ft1); thread1.start(); try { // 获取第一个线程的执行结果 // get()方法会阻塞直到线程执行完成并返回结果 System.out.println(ft.get()); } catch (Exception e) { e.printStackTrace(); } try { // 获取第二个线程的执行结果 System.out.println(ft1.get()); } catch (Exception e) { e.printStackTrace(); } } } // 1. 定义实现类来实现Callable接口 // 泛型参数表示返回值的类型 class MyCallable implements CallableString { private Integer n; // 构造方法传入计算范围 MyCallable(Integer n) { this.n n; } // 2. 重写call方法有返回值可以抛出异常 Override public String call() throws Exception { Integer sum 0; for (int i 1; i n; i) { sum i; } return 1..... n 的输出结果为 sum; } }实现关系MyCallable implements CallableString重写方法必须实现 call() 方法关键区别call() 方法可以有返回值call() 方法可以抛出异常run() 方法没有返回值不能抛出检查异常执行流程Callable实现类 → FutureTask包装 → Thread包装 → start()启动 → get()获取结果FutureTask 的作用适配器模式将 Callable 转换成 Runnable结果容器存储异步计算结果阻塞获取get() 方法会等待线程执行完成三种方法的执行流程// 方式1继承Thread Thread子类 → start() → JVM调用run() // 方式2实现Runnable Runnable实现类 → 传给Thread → start() → JVM调用run() // 方式3实现Callable Callable实现类 → FutureTask包装 → 传给Thread → start() → get()获取结果小结优先选择实现 Runnable 接口配合 Lambda 表达式需要返回值时使用 Callable FutureTask避免直接继承 Thread 类合理使用线程池管理线程资源
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

dw做汽车网站手机网页浏览器

📝 博客主页:jaxzheng的CSDN主页 医疗因果用DoWhy稳住推断结果:从数据迷雾到决策基石目录医疗因果用DoWhy稳住推断结果:从数据迷雾到决策基石 引言:医疗决策的“黑箱”困境 痛点挖掘:为何医疗因果推断总在“…

张小明 2026/1/17 22:33:24 网站建设

服装网站模板下载好网站用户体验

为什么选择 TensorFlow 2.9?性能对比与实际应用场景深度解析 在当今 AI 工程化加速落地的背景下,一个稳定、高效且开箱即用的开发环境,往往决定了项目从原型到上线的速度。尤其是在团队协作、跨平台部署和 GPU 资源调度日益复杂的场景下&…

张小明 2026/1/17 22:33:24 网站建设

做网站备案需要多长时间网站收录差

Gitee DevOps平台:中国企业数字化转型的加速器 在数字化转型浪潮席卷全球的今天,企业如何选择适合自身需求的DevOps平台成为技术决策者的核心议题。作为国内领先的代码托管与DevOps平台,Gitee凭借其本土化优势与全流程支持能力,正…

张小明 2026/1/17 22:33:23 网站建设

企业建设网站公司名称大全怎么注册公司微信

HunyuanOCR:灾害救援中的智能文档解析引擎 在一场突如其来的地震过后,废墟中散落着被雨水浸泡的医疗登记表、模糊不清的身份证明和手写标注的建筑结构图。通信中断,电力不稳,时间一分一秒流逝——此时,每一条能快速获取…

张小明 2026/1/17 22:33:26 网站建设

网站美工主要工作是什么joomla3.8与wordpress

受某些蛾和蝴蝶物种的启发,仿生蛾眼抗反射(AR)结构已被制造并广泛的应用。 这种结构可以通过设定尺寸小于光波长的截锥体(truncated cones)阵列来建模。 VirtualLab Fusion提供了构建它们的便捷工具,以及用…

张小明 2026/1/17 22:33:25 网站建设

深圳华企网站建设温州排名推广

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室🍊个人信条:格物致知,完整Matlab代码及仿真咨询…

张小明 2026/1/17 22:33:26 网站建设