多线程概述

Posted gbhh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程概述相关的知识,希望对你有一定的参考价值。

概述

多线程(multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。

进程:执行程序一次的执行过程,动态的,由系统资源分配的单位。

线程:是cpu调度和执行的单位。

进程包括多个线程,至少有一个线程。

真正的多线程是有多个cpu,即多核。

模拟出来的多线程是一个cpu,在一个时间点只能执行一个代码,因为切换的很快,所以就有了同时执行的错觉。

模型图片

技术图片

使用方法

Thread

  • 继承Thread
  • 覆写run方法
  • 创建对象
  • 调用start方法

Runnable

  • 接口Runnable
  • 覆写run方法
  • 创建对象
  • 创建Thread对象,将上一个对象传入,调用start方法

Callable

  • 接口Callable
  • 覆写call方法,相当于run方法
  • 创建对象
  • 创建执行服务 Executors.newFixedThreadPool(3);
  • 提交执行 ser.submit(t1);
  • 获取结果 r1.get();
  • 关闭服务 ser.shutdownNow();

实例

Thread

/**
 * 多线程 第一种 通过Thread实现
 */
public class ThreadDemo01 extends Thread {
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println("我在看代码--"+i);
        }
    }
    public static void main(String[] args) {
        ThreadDemo01 t1 = new ThreadDemo01();
//        普通的调用方法启动,按照顺序执行
//        t1.run();
        t1.start();    //正确的线程启动,不一定立即启动,等待cpu调度
        for (int i = 0; i < 100; i++) {
            System.out.println("我在学习--"+i);
        }
    }
}

Runnable

public class RunnableDemo01 implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println("我是子线程--"+i);
        }
    }

    public static void main(String[] args) {
        RunnableDemo01 runnable = new RunnableDemo01();
        Thread thread = new Thread(runnable);
        thread.start();
        for (int i = 0; i < 100; i++) {
            System.out.println("我是主线程--"+i);
        }
    }
}

Callable

/**
 * 通过Callable 实现多线程
 * 主要环节在四个注释的地方
 */
public class CallableDemo01 implements Callable<Boolean> {
    private String name;
    public CallableDemo01(String name) {
        this.name = name;
    }
    @Override
    public Boolean call() throws Exception {
        for (int i = 0; i < 100; i++) {
            System.out.println("我在看"+name+"--"+i);
        }
        return true;
    }
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        CallableDemo01 t1 = new CallableDemo01("淘宝");
        CallableDemo01 t2 = new CallableDemo01("京东");
        CallableDemo01 t3 = new CallableDemo01("苏宁易购");
        //创建执行服务
        ExecutorService ser = Executors.newFixedThreadPool(3);
        //提交执行
        Future<Boolean> r1 = ser.submit(t1);
        Future<Boolean> r2 = ser.submit(t2);
        Future<Boolean> r3 = ser.submit(t3);
//        获取结果
        Boolean res1 = r1.get();
        Boolean res2 = r2.get();
        Boolean res3 = r3.get();
        //关闭服务
        ser.shutdownNow();

        for (int i = 0; i < 100; i++) {
            System.out.println("我正在看着你们--"+i);
        }
    }
}

一句话

把一个任务交给多个线程来运行,就好比田径场分成1,2,3...等跑道,具有通用性。

以上是关于多线程概述的主要内容,如果未能解决你的问题,请参考以下文章

Java多线程具体解释

多个用户访问同一段代码

线程学习知识点总结

C#多线程处理多个队列数据的方法

多个请求是多线程吗

多线程概述