Java学习-多线程详解——Day9

目录

 

线程、进程、多线程

线程创建


线程、进程、多线程

普通方法调用和多线程

  • 普通方法调用:只有主线程一条执行路径

  • 多线程:多条执行路径,主线程和子线程并行交替执行

  • 一个进程可以有多个线程

 

Process与Thread

  • 程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念

  • 进程则是执行程序的一次执行过程,它是一个动态的概念。是系统资源分配的单位

  • 通常在一个进程中可以包含若干个线程,当然一个进程中至少有一个线程,不然没有存在的意义。线程是CPU调度和执行的单位

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

 

核心概念

  • 线程就是独立的执行路径

  • 在程序运行时,即使没有自己创建线程,后台也会有多个线程,如主线程,gc(垃圾回收)线程

  • main()称之为主线程,为系统的入口,用于执行整个程序

  • 在一个进程中,如果开辟了多个线程,线程的运行由调度器安排调度,调度器是与操作系统紧密相关的,先后顺序是不能人为的干预的

  • 对同一份资源操作时,会存在资源抢夺的问题,需要加入并发控制

  • 线程会带来额外的开销,如cpu调度时间,并发控制开销

  • 每个线程在自己的工作内存交互,内存控制不当会造成数据不一致

 

 

线程创建

三种创建方式

  1. Thread class:继承Thread类

  2. Runnable接口:实现Runnable接口

  3. Callable接口:实现Callable接口

 

Thread

  • 自定义线程类继承Thread类

  • 重写run()方法,编写线程执行体

  • 创建线程对象,调用start()方法启动线程

Java学习-多线程详解——Day9

 

线程不一定立即执行,CPU安排调度

 

实现Runnable接口

  • 定义MyRunnable类实现Runnable接口

  • 实现run()方法,编写线程执行体

  • 创建线程对象,调用start()方法启动线程

  • 推荐使用Runnable对象,因为Java单继承局限性

Java学习-多线程详解——Day9

 

小结

  • 继承Thread类

    • 子类继承Thread类具备多线程能力

    • 启动线程:子类对象.start()

    • 不建议使用:避免OPP单继承局限性

  • 实现Runnable接口

    • 实现接口Runnable具有多线程能力

    • 启动线程:传入目标对象+Thread对象.start()

    • 推荐使用:避免单继承局限性,灵活方便,方便同一个对象被多个线程使用

Java学习-多线程详解——Day9

 

上一篇:Hiver 操作 MySQL 导致锁表


下一篇:Java学习笔记 Day9 面向对象(四)及 异常