1.并发编程基础

目录

  • 概述
  • 线程和进程
  • 并发和并行
  • 线程上下文切换
  • 线程的一生
    • wait与sleep的区别
  • 结束

概述

线程和进程

  • 进程:是指内存运行的一个应用程序,是系统运行程序的基本单位,是程序的一次执行过程
  • 线程:是进程中的一个执行单元,负责当前进程中任务的执行,一个进程会产生很多线程

两者主要区别:每个进程都有独立内存空间。线程之间的堆空间和方法区共享,线程栈空间和程序计数器是独立的。线程消耗资源比进程小的多。

并发和并行

  • 并发Concurrency:同一时间段,多个任务都在执行,单位时间内不一定是同时执行
  • 并行Parallel:单位时间内,多个任务同时执行,单位时间内一定是同时执行。
  • 并发是一种能力,并行是一种手段

注意: 并行处理是基于硬件CPU的是固定的,而并发处理的能力是可以通过设计编码进行提高的。
1.并发编程基础_第1张图片

线程上下文切换

一个CPU同一时刻只能被一个线程使用,为了提升效率CPU采用时间片算法将CPU时间片轮流分配给多个线程。在分配的时间片内线程执行,如果没有执行完毕,则需要挂起,将CPU让给其它线程。

过程:

  • 1.CPU切换线程,会将当前线程的执行位置记录下来,用于下次执行时找到准备位置
  • 2.线程执行位置的记录与加载过程就叫做上下文切换
  • 3.线程执行位置记录在程序计数器

线程的一生

线程的生命周期六种状态:

  • new (新建)
  • runnable (可运行)
  • terminated (终止)
  • blocked (锁阻塞)
  • waiting (无限等待)
  • timed_waiting (超时等待)
    1.并发编程基础_第2张图片

wait与sleep的区别

  • 主要区别:sleep() 方法没有释放锁,wait()方法释放了锁
  • 两者都可以暂停线程执行:wait()常用于线程间交互/通信,sleep()用于暂停线程执行
  • wait()方法被调用后,需要别的线程调用同一个对象的notify和notifyAll,超时苏醒使用wait(long)
  • sleep()方法执行完成后,线程会自动苏醒。

结束

并发编程基础概念就结束了,如有疑问,欢迎评论区留言。

你可能感兴趣的:(并发编程,java,并发编程,概念)