多线程多进程

本文详细介绍了多线程和多进程的概念,包括进程与线程的关系、并发与并行的区别、同步与异步的概念。讲解了线程的创建方式、线程的状态及其三大特性,并探讨了线程池的工作原理和核心参数。此外,还讨论了线程间的通信机制、锁的类型和优化策略,以及死锁问题。最后,提到了进程间通信的多种方式,如管道、信号、消息队列、内存映射和套接字,并简述了Java进程间通信的实现方式。
摘要由CSDN通过智能技术生成
  1. 基本概念:
    1. 进程:执行程序的一次执行过程,是系统进行资源分配和调度的基本单位,其中,程序是指令和数据的有序集合
    2. 线程:CPU调度和执行的单元,最小的处理单元
    3. 进程和线程之间的关系:
      1. 一个进程可以有多个线程
      2. 资源分配给进程,同一进程的所有线程共享进程的所有资源
      3. CPU运行的是线程
    4. 并发和并行:
      1. 并行:同一时刻,多个任务同时执行
      2. 并发:执行多个任务,能顺利的来回切换。并发包含并行
      3. 多核CPU能够支持多线程并行执行,单核CPU只能支持多线程的并发执行
    5. 同步和异步:
      1. 同步:发送消息,需要等结果放回才能继续下面的步骤
      2. 异步,不需等待,可以执行下面的步骤
  2. 多线程
    1. 创建方式:
      1. 继承Thread类实现多线程,主线程调用此类对象的start()开始线程,线程执行run()方法。
      2. 实现Runnable()接口实现多线程,主线程中通过向Thread对象传递,类对象作为参数,调用Thread对象的start()方法开始线程,线程执行run()方法。
      3. 实现Callable(JDK1.5),实现与实现Runnable()接口相同,线程执行call()方法,有返回值。
      4. 通过线程池调用:通过Executor 的工具类可以创建三种类型的普通线程池
        1. 固定大小的线程池
        2. 单线程池
        3. 缓存线程池
    2. 线程的状态(由CPU调度)
      1. 初始状态:new出一个线程实例
      2. 就绪状态:等待CPU调度的状态(开始调用start()方法,当前线程sleep()结束,其他线程join()结束)
      3. 运行状态:CPU正在执行的线程
      4. 阻塞状态:执行上锁的方法区或代码块,需等待锁的释放
      5. 等待状态:使程序暂停一段时间再执行(sleep()),或等另外一个程序执行完毕再执行(wait(),notify())
      6. 结束状态:线程停止(结束或出错)
    3. 三大特性:
      1. 原子性:一个线程要么执行,要么不执行
      2. 可见性:当一个线程对数据进行修改,其他线程能够立刻知道这个修改。当一个共享变量被volatile(修饰变量时,每次读取更新,都是在内存中读取,而不是从CPU cache中读取)修饰时,它会保证修改的值会立即被更新到主存,当有其他线程需要读取时,它会去内存中读取新值。synchronized和Lock也能保持可见性。
      3. 有序性:程序执行的顺序按照代码的先后顺序执行。
    4. 线程池:
      1. 核心参数:
        1. corePoolSize:线程池的核心大小,队列没满时,线程最大并发数
        2. maximumPoolSize:最大线程大小,队列满后线程能容纳的最大并发数
        3. workQueue:任务队列,用来保存等待执行的任务
        4. keepAliveTime:空闲线程等待回收的时间限制
        5. unit:keepAliveTime时间单位
        6. threadFactory:创建线程的工厂,一般默认即可
        7. handler:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值