创建线程的四种方式

文章目录 继承Thread类 实现Runnable接口 使用Callable和Future创建线程 使用Executor框架创建线程池 继承Thread类 步骤 定义一个Thread类的子类,重写run方法,将相关逻辑实现,run()方法就是线程要执行的业务逻辑方法 创建自定义的线程子类对象 调用子类实例的star()方法来启动线程 public class MyThread extends

继承Thread类

步骤

  1. 定义一个Thread类的子类,重写run方法,将相关逻辑实现,run()方法就是线程要执行的业务逻辑方法
  2. 创建自定义的线程子类对象
  3. 调用子类实例的star()方法来启动线程
public class MyThread extends Thread {    @Override    public void run() {        System.out.println(Thread.currentThread().getName() + " run()方法正在执行...");    }}
public class TheadTest {    public static void main(String[] args) {        MyThread myThread = new MyThread();         myThread.start();        System.out.println(Thread.currentThread().getName() + " main()方法执行结束");    }}

运行结果

main main()方法执行结束

Thread-0 run()方法正在执行...

实现Runnable接口

步骤

  1. 定义Runnable接口实现类MyRunnable,并重写run()方法
  2. 创建MyRunnable实例myRunnable,以myRunnable作为target创建Thead对象,该Thread对象才是真正的线程对象
  3. 调用线程对象的start()方法
public class MyRunnable implements Runnable {    @Override    public void run() {        System.out.println(Thread.currentThread().getName() + " run()方法执行中...");    }}
public class RunnableTest {    public static void main(String[] args) {        MyRunnable myRunnable = new MyRunnable();        Thread thread = new Thread(myRunnable);        thread.start();        System.out.println(Thread.currentThread().getName() + " main()方法执行完成");    }}

执行结果

main main()方法执行完成

Thread-0 run()方法执行中...

使用Callable和Future创建线程

步骤

  1. 创建实现Callable接口的类myCallable
  2. 以myCallable为参数创建FutureTask对象
  3. 将FutureTask作为参数创建Thread对象
  4. 调用线程对象的start()方法
public class MyCallable implements Callable<Integer> {    @Override    public Integer call() {        System.out.println(Thread.currentThread().getName() + " call()方法执行中...");        return 1;    }}
public class CallableTest {    public static void main(String[] args) {        FutureTask<Integer> futureTask = new FutureTask<Integer>(new MyCallable());        Thread thread = new Thread(futureTask);        thread.start();        try {            Thread.sleep(1000);            System.out.println("返回结果 " + futureTask.get());        } catch (InterruptedException e) {            e.printStackTrace();        } catch (ExecutionException e) {            e.printStackTrace();        }        System.out.println(Thread.currentThread().getName() + " main()方法执行完成");    }}

执行结果

Thread-0 call()方法执行中...返回结果 1

main main()方法执行完成

使用Executor框架创建线程池

Executors提供了一系列工厂方法用于创先线程池,返回的线程池都实现了ExecutorService接口。

主要有newFixedThreadPool,newCachedThreadPool,newSingleThreadExecutor,newScheduledThreadPool,后续详细介绍这四种线程池

public class MyRunnable implements Runnable {    @Override    public void run() {        System.out.println(Thread.currentThread().getName() + " run()方法执行中...");    }}
public class SingleThreadExecutorTest {    public static void main(String[] args) {        ExecutorService executorService = Executors.newSingleThreadExecutor();        MyRunnable runnableTest = new MyRunnable();        for (int i = 0; i < 5; i++) {            executorService.execute(runnableTest);        }        System.out.println("线程任务开始执行");        executorService.shutdown();    }}

执行结果

线程任务开始执行

pool-1-thread-1 is running...pool-1-thread-1 is running...pool-1-thread-1 is running...pool-1-thread-1 is running...pool-1-thread-1 is running...
知秋君
上一篇 2024-07-03 15:30
下一篇 2024-07-03 15:30

相关推荐