Java中的线程(创建多线程的三种方法)

Java中的线程——创建

  • 创建多线程
    • 方式一:继承Thread类
    • 方式二:实现Runnable接口
    • 方式三:实现Callable接口
  • 线程的常用API

创建多线程

方式一:继承Thread类

  • 定义一个子类MyThread继承线程类java.lang.Thread,重写run方法
  • 创建MyThread类的对象
  • 调用线程对象的start()方法启动线程(启动后还是执行run方法)
    Java中的线程(创建多线程的三种方法)_第1张图片

优缺点:

  • 优点:编码简单
  • 确定:线程类已经继承Thread,无法继承其他类,不利于功能的扩展

多线程的注意事项:

  1. 启动线程必须调用start方法,不是调用run方法;
  2. 不要把主线程任务放在启动子线程之前

方式二:实现Runnable接口

  • 定义一个线程任务类MyRunnable实现Runnable接口,重写run方法
  • 创建MyRunnable任务对象
  • 把MyRunnable任务对象交给Thread处理
    Java中的线程(创建多线程的三种方法)_第2张图片
  • 调用线程对象的start()方法启动线程
    Java中的线程(创建多线程的三种方法)_第3张图片
    优缺点:
  • 优点:任务类只是实现接口,可以继续继承其他类、实现其他接口,扩展性强
  • 确定:需要多一个Runnable对象

另一种写法:匿名内部类写法

  1. 可以创建Runnable的匿名内部类对象
  2. 再交给Thread线程对象
  3. 再调用线程对象start启动线程

Java中的线程(创建多线程的三种方法)_第4张图片
匿名内部类的简化方法
Java中的线程(创建多线程的三种方法)_第5张图片

方式三:实现Callable接口

如果线程执行完毕后有一些数据需要返回,他们重写的run方法均不能直接返回结果。
解决方法:

  • JDK 5 提供了Callable接口和FutureTask类来实现(多线程的第三种创建方式)
  • 最大优点:可以返回线程执行完毕后的结果
  1. 创建任务对象:
    (定义一个类实现Callable接口,重写call方法,封装要做的事情,和要返回的数据)
    (把Callable类型的对象封装成FutureTask(线程任务对象))
  2. 把线程任务对象交给Thread对象
  3. 调用Thread对象的start方法启动线程
  4. 线程执行完毕后,通过FutureTask对象的get方法获取线程任务执行的结果

Java中的线程(创建多线程的三种方法)_第6张图片
Java中的线程(创建多线程的三种方法)_第7张图片
Java中的线程(创建多线程的三种方法)_第8张图片
在这里插入图片描述

线程的常用API

Java中的线程(创建多线程的三种方法)_第9张图片

你可能感兴趣的:(Java学习路线,java,开发语言)