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

途牛企业网站建设牛奶软文广告营销

途牛企业网站建设,牛奶软文广告营销,长春市疫情最新消息,网站内页跳转wap目录 1. Thread 类和 Runnable 接口的设计目的 1.1 为什么有 Thread 类和 Runnable 接口? 2. Thread 类实现的详细分析 2.1 Thread 类的构造方法 2.2 start() 方法的工作原理 2.3 run() 方法 2.4 join() 方法 3. Runnable 接口的实现和作用 3.1 Runnable 接…

目录

1. Thread 类和 Runnable 接口的设计目的

1.1 为什么有 Thread 类和 Runnable 接口?

2. Thread 类实现的详细分析

2.1 Thread 类的构造方法

2.2 start() 方法的工作原理

2.3 run() 方法

2.4 join() 方法

3. Runnable 接口的实现和作用

3.1 Runnable 接口的设计目标

3.2 Runnable 的使用方式

3.3 Runnable 和 Thread 的解耦

4. Thread 和 Runnable 的优缺点比较

5. 常见的线程池与 Runnable 配合使用

5.1 使用 ExecutorService 线程池

6. 总结


1. Thread 类和 Runnable 接口的设计目的

1.1 为什么有 Thread 类和 Runnable 接口?

Thread 类和 Runnable 接口是 Java 多线程编程的核心。它们设计的目的分别是:

  • Thread:直接管理线程的生命周期和线程的运行。每个 Thread 类对象代表一个操作系统中的线程,你可以通过 start() 方法启动线程,通过 run() 方法执行任务。
  • Runnable 接口:定义线程要执行的任务。它使得任务与线程解耦,从而让同一个任务可以在多个线程中执行,提高了任务的复用性和灵活性。

2. Thread 类实现的详细分析

Thread 类是 Java 中用于创建和控制线程的主要类。它实现了 Runnable 接口,提供了线程管理和调度的基本方法。

2.1 Thread 类的构造方法

Thread 类提供了多种构造方法,但我们常用的有两种:

public Thread(Runnable target) { ... }
Runnable target:传入一个 Runnable 对象,这个对象表示线程执行的任务。Thread 会在 run() 方法中调用 Runnable 的 run() 方法。
public Thread(Runnable target, String name) { ... }
String name:给线程命名,便于调试和监控。线程的名称在大多数情况下是可选的,但在多线程调试时非常有用。
2.2 start() 方法的工作原理

start() 方法启动线程,实际的底层实现是通过操作系统的线程调度机制来启动一个新线程。我们来详细看看 Thread 类的 start() 方法:

public synchronized void start() {if (threadStatus != NEW) throw new IllegalThreadStateException();group.add(this);start0();  // native方法,调用底层操作系统的接口启动线程
}
  • synchronized:使用同步来保证线程的安全,确保一个线程只能调用一次 start() 方法。
  • start0():这是一个 native 方法,意味着它是用本地代码(通常是操作系统层面的代码)实现的。这个方法的作用是通知操作系统为当前线程分配执行资源,并启动它。
2.3 run() 方法

线程的任务是通过 run() 方法来定义的。Thread 类中有一个默认的 run() 方法:

public void run() {if (target != null) {target.run();  // 如果传入了Runnable任务,则执行它}
}
  • target 是在构造线程时传入的 Runnable 对象。run() 方法会调用 Runnable.run() 方法来执行任务。
  • 如果没有传入 Runnable 对象,那么 run() 方法什么也不做。

2.4 join() 方法

join()Thread 类的一个非常有用的方法,用于线程间的同步。通过 join(),我们可以让当前线程等待某个线程执行完毕再继续执行。

public final void join(long millis) throws InterruptedException {if (millis <= 0) {join();} else {long startTime = System.currentTimeMillis();long remainingTime = millis;synchronized (this) {while (isAlive()) {wait(remainingTime);remainingTime = millis - (System.currentTimeMillis() - startTime);if (remainingTime <= 0) break;}}}
}

join() 方法内部通过 wait()notify() 实现线程的等待机制。主线程可以通过调用其他线程的 join() 来阻塞等待该线程的执行结束。

3. Runnable 接口的实现和作用

3.1 Runnable 接口的设计目标

Runnable 是一个功能性接口,它没有线程管理的功能,只定义了线程执行的任务。它的作用是将任务与线程的管理分开。

public interface Runnable {void run();  // 线程要执行的任务
}
3.2 Runnable 的使用方式

Runnable 是 Java 中实现多线程任务的常见方式之一。当我们有多个线程需要执行同一个任务时,使用 Runnable 可以更方便地传递任务。

public class MyRunnable implements Runnable {@Overridepublic void run() {System.out.println("This is a task being executed by a thread.");}
}public class Main {public static void main(String[] args) {MyRunnable task = new MyRunnable();Thread thread = new Thread(task);  // 将任务传给线程thread.start();  // 启动线程}
}
3.3 RunnableThread 的解耦

Runnable 的重要优势在于它解耦了任务和线程的关系。任务(Runnable)可以独立于线程(Thread)存在,多个线程可以共享同一个任务,这样可以复用任务代码,提高代码的灵活性和可维护性。

4. ThreadRunnable 的优缺点比较

特性ThreadRunnable 接口
继承关系继承自 Thread 类,不能继承其他类只实现 Runnable 接口,可以继承其他类
灵活性不灵活,只能继承 Thread 类,不能继承其他类灵活,可以继承其他类,支持多任务复用
任务执行方式必须重写 run() 方法来执行任务只需实现 run() 方法来定义任务
适用场景当线程和任务紧密耦合,且无需继承其他类时当任务和线程解耦时,适合用 Runnable 接口
资源共享不支持共享任务允许多个线程共享同一个 Runnable 对象

5. 常见的线程池与 Runnable 配合使用

在实际开发中,我们通常不会直接使用 Thread 类来管理线程,因为线程的创建和销毁会带来较高的性能开销。更推荐使用 线程池 来管理线程,Runnable 接口可以配合线程池执行任务。

ExecutorService 是 Java 提供的一个高效的线程池接口,它允许我们以一种更简单、优雅的方式来管理线程。

5.1 使用 ExecutorService 线程池
import java.util.concurrent.*;public class ExecutorServiceExample {public static void main(String[] args) {ExecutorService executorService = Executors.newFixedThreadPool(3);  // 创建一个固定大小的线程池Runnable task1 = new Runnable() {@Overridepublic void run() {System.out.println("Task 1 is executing.");}};Runnable task2 = new Runnable() {@Overridepublic void run() {System.out.println("Task 2 is executing.");}};executorService.submit(task1);  // 提交任务到线程池executorService.submit(task2);  // 提交任务到线程池executorService.shutdown();  // 关闭线程池}
}

在上面的代码中,使用 ExecutorService 来管理线程池。我们提交了多个 Runnable 任务,线程池会自动从线程池中获取空闲线程来执行这些任务。

6. 总结

  • Thread:是最基础的线程实现方式,适用于线程和任务紧密耦合的情况。通过继承 Thread 类,可以重写 run() 方法来执行任务。
  • Runnable 接口:是更灵活的方式,适用于任务和线程分离的情况。多个线程可以共享同一个 Runnable 任务,从而提高任务复用性。
  • 线程池(ExecutorService:在实际开发中,推荐使用线程池来管理线程,避免手动创建、销毁线程带来的性能开销。
http://www.hkea.cn/news/492590/

相关文章:

  • 合肥公司网站建设价格低西安网络科技公司排名
  • 怎么样建设个人网站企业文化建设
  • 如何知道网站有没有备案成都seo公司
  • wordpress 艺术主题南京网络优化公司有哪些
  • 贵阳网站备案百度网站优化方案
  • 单位网站建设论文怎么做竞价托管
  • 建筑公司网站有哪些谈谈自己对市场营销的理解
  • 做ppt音乐怎么下载网站企业培训课程有哪些
  • magento网站建设网站优化排名软件网站
  • 做生鲜食品最好的网站网络推广及销售
  • 销售管理系统需求分析长沙seo代理
  • 站长网站查询深圳百度关键字优化
  • 用net语言做网站平台好不好企业培训师资格证报考2022
  • 成都定制网站设竞价推广遇到恶意点击怎么办
  • 制作视频网站建设友链交易网
  • 做外贸是不是要有网站腾讯企点app下载安装
  • 网站开发快递文件国外网站怎么推广
  • 网站和搜索引擎站长论坛
  • 做违法网站会怎样外贸独立站怎么建站
  • 云主机建网站教程深圳全网推互联科技有限公司
  • 做网站赚50万谷歌搜索引擎363入口
  • 台州网站设计外包网页制作公司排名
  • 网站建设投标文件范本亚马逊提升关键词排名的方法
  • 学做网站需要多长时间免费推广平台排行
  • wordpress运行php 404360优化大师下载
  • seo排名网站 优帮云线上推广的三种方式
  • 平凉哪有做网站的百度推广登录入口官网网
  • 娄底网站优化自建网站平台有哪些
  • 做网站需要多少兆空间wix网站制作
  • 哪些网站教做生物实验今日新闻联播