美文网首页
Java创建线程的方式

Java创建线程的方式

作者: 8a5e0731064f | 来源:发表于2019-10-23 16:06 被阅读0次

Java创建线程的四种方式

1.继承Thread类创建线程

  • 定义Thread类的子类,并重写该类的run方法,run()方法的内容就是该线程执行的内容
  • 创建Thread子类的实例,即创建了线程对象。
  • 调用线程对象的start()方法来启动该线程。
    代码演示
public class MyThread extends Thread {

    @Override
    public void run() {
        // 执行业务逻辑
    }

    public static void main(String[] args) {
        MyThread myThread = new MyThread();
        myThread.start();
    }
}

2.通过Runnable接口创建线程类

  • 定义runnable接口的实现类,并重写该接口的run()方法,该run()方法的方法体同样是该线程的线程执行体。
  • 创建 Runnable实现类的实例,并依此实例作为Thread的target来创建Thread对象,该Thread对象才是真正的线程对象。
  • 调用线程对象的start()方法来启动该线程。
    代码演示
public class MyRunnable implements Runnable {
    @Override
    public void run() {
        // 执行业务逻辑
    }
    
    public static void main(String[] args) {
        MyRunnable myRunnable = new MyRunnable();
        Thread thread = new Thread(myRunnable);
        thread.start();
    }
}

3.使用Callable接口和FutureTask类实现创建有返回结果的线程

FutureTask 的出现是为了弥补 Thread 的不足而设计的,可以让程序员跟踪、获取任务的执行情况、计算结果

  • 创建Callable接口的实现类,并实现call()方法,该call()方法将作为线程执行体,并且有返回值。
  • 创建Callable实现类的实例,使用FutureTask类来包装Callable对象,该FutureTask对象封装了该Callable对- 象的call()方法的返回值。
  • 使用FutureTask对象作为Thread对象的target创建并启动新线程。
  • 调用FutureTask对象的get()方法来获得子线程执行结束后的返回值。
    代码演示
public class MyCallable implements Callable<Integer>{
    @Override
    public Integer call() throws Exception {
        System.out.println("子线程开始计算");
        Thread.sleep(2000);
        System.out.println("子线程结束计算");
        return 100 * 100;
    }

    public static void main(String[] args) throws ExecutionException, InterruptedException {
        // 实例化Callable对象
        MyCallable myCallable = new MyCallable();
        // 使用FutureTask包装
        FutureTask<Integer> futureTask = new FutureTask<>(myCallable);
        // 创建一个线程执行任务
        Thread thread = new Thread(futureTask);
        thread.start();
        Thread.sleep(1000);
        System.out.println("主线程执行");
        // 使用get()方法会阻塞主线程,直到子线程执行完成返回结果
        int result = futureTask.get();
        System.out.println("子线程计算结果: " + result);
    }

}

执行结果

子线程开始计算
主线程执行
子线程结束计算
子线程计算结果: 10000

4.使用线程池创建线程

为什么要使用线程池呢?
当不是执行一次性任务的时候,如果不使用线程池,那么就要频繁的创建和销毁线程,这是一个比较消耗资源的操作,使用线程池可以灵活的调整线程资源的占用,防止消耗过多的内存
在Java中已经提供了ExecutorSerice、Executors等工具类为我们快速的创建线程池
常用的常见线程的方法有

  • Executors.newFixedThreadPool(int nThreads) --- 创建固定线程数量的线程池
  • Executors.newSingleThreadPool() --- 创建只包含一个线程的线程池
  • Executors.newCachedThreadPool() --- 创建一个可缓存的线程池。如果线程池的当前规模超过了处理需求时,那么就会回收部分空闲的线程(根据空闲时间来回收),当需求增加时,此线程池又可以智能的添加新线程来处理任务。此线程池不会对线程池大小做限制,线程池大小完全依赖于操作系统(或者说JVM)能够创建的最大线程大小。
  • Executors.newScheduledThreadPool() --- 创建了一个固定长度的线程池,而且以延迟或定时或周期的方式来执行任务,类似于Timer。可应用于重发机制。

相关文章

  • 线程

    java 中创建线程有哪几种方式? Java中创建线程主要有三种方式: 一、继承Thread类创建线程类 (1)定...

  • Java多线程:线程的创建与启动

    # 面试题: Java中创建线程有几种方式。 不同的创建方式有什么区别。 如何启动一个线程。 # Java中创建线...

  • 【java基础】线程

    java基础 线程 参考详细:Java之多线程 一、创建线程 创建线程常见有两种方式,另外有两种新增方式 1.Th...

  • Java基础(六)

    多线程 Java多线程并发 1.1 JAVA 并发知识库 1.2 JAVA 线程实现/创建方式 1.2.1 继承 ...

  • java中创建线程池的方式

    创建线程池的方式: 使用Java提供的用于管理线程池的接口ExecutorService 创建线程池,共有四种方式...

  • 1 Java线程知识

    Java三种创建线程的方式:

  • 多线程 学习1

    一、创建线程方式 java创建线程的方式,主要有三种:类Thread、接口Runnable、接口Callable。...

  • Java 创建线程的 3 种方式

    Java 创建线程的 3 种方式 Java 创建线程有多种方式,我们经常使用的一般为以下 3 种。 直接继承 Th...

  • kotlin学习第九天:线程、协程

    线程 Java中创建线程的两种方式 Thread类 Java使用java.lang.Thread类代表线程,所有的...

  • 面试题整理

    Java基础 创建线程的方式有哪些? 继承Thread类创建线程类 通过Runnable接口创建线程类 通过Cal...

网友评论

      本文标题:Java创建线程的方式

      本文链接:https://www.haomeiwen.com/subject/tbyhvctx.html