专栏首页行者常至004.多线程-线程的三种创建方式

004.多线程-线程的三种创建方式

1. extend Thread

package cn.qbz.thread;

public class ExtendThreadTest {
    public static void main(String[] args) {
        ExtendThread thread = new ExtendThread();
        thread.start();
        for (int i = 0; i < 300; i++) {
            System.out.println("主线程:" + Thread.currentThread().getName() + "  " + i);
        }
    }
}

class ExtendThread extends Thread {
    @Override
    public void run() {
        for (int i = 0; i < 300; i++) {
            System.out.println("子线程:" + this.getName() + "  " + i);
        }
    }
}

2. implement Runnable

package cn.qbz.thread;

public class ImplementRunnableTest {
    public static void main(String[] args) {
        ImplementRunnable runnable = new ImplementRunnable();
        Thread thread = new Thread(runnable);
        thread.start();

        for (int i = 0; i < 300; i++) {
            System.out.println("主线程:" + Thread.currentThread().getName() + "  " + i);
        }
    }
}

class ImplementRunnable implements Runnable {

    public void run() {
        for (int i = 0; i < 300; i++) {
            System.out.println("子线程:" + Thread.currentThread().getName() + "  " + i);
        }
    }
}

3.implement Callable

package cn.qbz.thread;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
import java.util.concurrent.TimeoutException;

public class ImplementCallableTest {
    public static void main(String[] args) {
        ImplementCallable callable = new ImplementCallable(666);
        FutureTask<Integer> futureTask = new FutureTask<Integer>(callable);
        Thread thread = new Thread(futureTask);
        thread.start();

        for (int i = 0; i < 300; i++) {
            System.out.println("主线程:" + Thread.currentThread().getName() + "  " + i);
        }

        try {
            System.out.println("子线程返回值:" + futureTask.get());
        } catch (InterruptedException e) {
            System.out.println("eeeeeeeeeeeeee222....." + e.getMessage());
        } catch (ExecutionException e) {
            System.out.println("eeeeeeeeeeeeee....." + e.getMessage());
        }
        for (int j = 0; j < 10; j++) {
            System.out.println("jjjjjjjjjjj  " + j);
        }
    }
}

class ImplementCallable implements Callable<Integer> {
    private Integer result;

    public ImplementCallable(Integer result) {
        this.result = result;
    }

    public Integer call() throws Exception {
        for (int i = 0; i < 300; i++) {
            System.out.println("子线程:" + Thread.currentThread().getName() + "  " + i);
            if (i == 268) {
                throw new TimeoutException();
            }
        }
        return result;
    }
}
  1. Implement Callable,重写call方法,不但可以返回值,还可以抛出异常。
  2. 抛出的异常,在futureTask.get()中被捕获
  3. futureTask.get()在执行的过程中会阻塞,一直到所在线程执行结束
  4. futureTask还有相关方法来进行了解线程的执行情况

三种创建方式的比较:

当前主流的就是面向接口开发, 因为实现了接口后还可以根据业务需要再继承其他的类。 实现Runnable接库与实现Callable接口对比来看, Callable接口有几个优势,也就是上面所说的: 可返回值,可抛出异常,可了解线程执行情况。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 019.数据交换格式:Json、XML

    数据交换格式中,最核心的就是Json和XML。 其中,Json是一种轻量级数据交换格式,XML是一种重量级的数据交换格式。 相比于xml这种数据交换格式来说...

    qubianzhong
  • 什么是数据库事务(what is database transaction)?

    qubianzhong
  • 022.自定义注解

    注解是Jdk1.5新增新技术。很多框架为了简化代码,都会提供有些注解。 可以理解为插件,是代码级别的插件,在类的方法上写:@XXX,就是在代码上插入了一个插件...

    qubianzhong
  • Spring Boot的过滤器

    其中1代表是微服务启动类,2代表在启动类下面构建一个包,再在堡垒新建一个过滤器类,并且实现 Filter 接口

    breezedancer
  • Java基础——Synchronized

    方法锁 synchronized修饰普通方法,不可以是静态方法,锁对象默认是this

    羊羽shine
  • 阿里大于短信服务_总结_01_短信验证码接入

    shirayner
  • Java基础知识笔记五(详细)(1024即将到来,那就文末留言送书吧)

    1,因为面向对象思想是基于面向过程思想。回想一下之前,在做一些练习的时候,我首先得清楚,我需要做什么操作,然后在一步步分析要怎么做,最后用代码实现。需要面对每一...

    用户7656790
  • Java自动化测试(循环/条件控制语句 预习3)

    初始化值1->循环终止条件2「true」->循环体3->循环体执行后的语句4 ->循环终止条件2「true」->循环体3->循环体执行后的语句4->…循环终止条...

    zx钟
  • 第九节:详细讲解Java中的泛型,多线程,网络编程

    大家好,我是 Vic,今天给大家带来详细讲解Java中的泛型,多线程,网络编程的概述,希望你们喜欢

    达达前端
  • java中的数学工具类Math

    java.util.Math类是数学相关的工具类,里面提供了大量的静态方法,完成与数学运算相关的操作。

    崔笑颜

扫码关注云+社区

领取腾讯云代金券