多线程简单入门

多线程简单入门

 

目录

多线程简单入门

线程和进程

多线程作用

应用场景

多线程的几种状态

多线程的几种实现方式

继承Thread类。

实现Runnable接口

实现Callable

使用匿名内部类创建线程


线程和进程

进程相当于N个线程

例如:每个软件启动后就相当于一个进程,里面多个模块就相当于多个线程。

进程是线程的集合,每一个线程是进程中的一条执行路径。

多线程作用

合理利用多线程可以提高程序的执行效率

应用场景

异步实现发送短信;

异步实现记录日志;

异步请求后端接口耗时较长的接口,缩短时间等~

快速提高HTTP协议的响应,提升用户体验。

因为Http默认情况下采用同步的形式,整个过程就是基于请求与响应的过程。

如果服务器端没有及时的响应客户端,就会造成客户端一直处于等待状态,这样会导致用户体验很不友好。

多线程的几种状态

多线程的几种实现方式

  1. 继承Thread类,重写run方法;
  2. 实现Runnable接口,重写run方法;
  3. 使用匿名内部类;
  4. 可以带返回结果的线程Callable;
  5. 线程池;
  6. 其他扩展方式~

      注:使用run方法时是不能throw抛异常的,需要使用try/catch去捕获异常

       一般用实现Runnable接口创建线程比较好,因为继承Thread类后不可再继承,实现Runnable接口后还可以继承。

继承Thread类。

运行结果:

注:线程1、2同时执行,根据cup资源随机分配执行

实现Runnable接口

 注:运行结果和继承Thread类类似,实现Runnable接口开启线程要强转为Thread,因为Runnable接口是Thread的实现类。实现Runnable接口用Thread.currentThread().getName(),currentThread()方法获取线程对象,getId()获取线程id是JVM底层分配getName()获取线程名称,打印日志时一定要打印线程id,方便bug查看

实现Callable

public class CallableTest implements Callable<String> {

    @Override
    public String call() throws Exception {
        System.out.println("子线程"+Thread.currentThread().getName()+",开始运行!");
        Thread.sleep(3000);
        return "Callable返回结果!";
    }

    public static void main(String[] args) throws ExecutionException, InterruptedException {
        FutureTask<String> futureTask = new FutureTask<>(new CallableTest());
        new Thread(futureTask).start();
        // 获取线程返回结果
        System.out.println(futureTask.get());
    }
}

运行结果:

使用匿名内部类创建线程

运行结果:

注:如文章有误,欢迎批评指正,欢迎交流。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值