线程概述

进程:是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竞争计算机系统资源的基本单位。

线程:是进程的一个执行单元,是进程内科调度实体。比进程更小的独立运行的基本单位。线程也被称为轻量级进程。

程序,进程,线程:

在操作系统中运行的程序就是进程,比如你的QQ、播放器、游戏、IDE等等…

一个进程可以有多个线程,如视频中同时听声音,看图像,看字幕。。。

进程Process与线程Thread

  1. 进程里面就有程序。程序是咱们写的代码,是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念。
  2. 进程是执行程序的一次执行过程,它是一个动态的概念。是系统资源分配的单位。
  3. 通常在一个进程中可以包含若干个线程,当然一个进程中至少有一个线程,不然没有存在的意义。线程是CPU调度和执行的单位。

程序跑起来,变成进程,进程是系统分配的单位,系统分配给我,我去开辟一个新的进程,进程里面呢,有线程,真正执行的是线程,进程相当于一个保护伞,咱们把线程放在里面,哪怕你的进程什么都不干,里面也有一个线程,叫main(),咱们的主线程。它跑的是主线程,Java里面还有gc()线程,垃圾回收。

注意:

很多多线程是模拟出来的,真正的多线程是指有多个cpu,即多核,如服务器。如果是模拟出来的多线程,即在一个cpu的情况下,在同一个时间点,cpu只能执行一个代码,因为切换的速度很快,所以就有了同时执行的错觉。

核心概念:

  • 线程就是独立的执行路径;
  • 在程序运行时,即使没有自己创建线程,后台也会有多个线程,如主线程,gc线程;
  • main()称之为主线程,为系统的入口,用于执行整个程序;
  • 在一个进程中,如果开辟了多个线程,线程的运行由调度器安排调度,调度器是与操作系统紧密相关的,先后顺序是不能人为干预的。
  • 对同一份资源操作时,会存在资源抢夺的问题,需要加入并发控制;
  • 线程会带来额外的开销,如cpu调度时间,并发控制开销;
  • 每个线程在自己的工作内存交互,内存控制不当会造成数据不一致;

线程实现(重点):实现线程的3种方式,继承Thread,实现Runnable接口,实现Callable接口(了解)

//回顾总结线程的创建
public class ThreadNew {
    public static void main(String[] args) {
        new MyThread1().start();

        new Thread(new MyThread2()).start();

        //FutureTask实现了一个RunnableFuture接口,RunnableFuture接口继承了Runnable,实现了run方法
        FutureTask<Integer> futureTask = new FutureTask<Integer>(new MyThread3());
        new Thread(futureTask).start();

        try {
            Integer integer = futureTask.get();
            System.out.println(integer);
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }

    }
}


//1.继承Thread类
class MyThread1 extends Thread {
    @Override
    public void run() {
        System.out.println("MyThread1");
    }
}

//2.实现Runnable接口
class MyThread2 implements Runnable {

    @Override
    public void run() {
        System.out.println("MyThread2");
    }
}

//3.实现Callable接口
class MyThread3 implements Callable<Integer> {

    @Override
    public Integer call() throws Exception {
        System.out.println("MyThread3");
        return 100;
    }
}

结果:
MyThread1
MyThread2
MyThread3
100
posted @ 2020-05-11 19:51  我有满天星辰  阅读(4)  评论(0编辑  收藏  举报