小白的JUC学习01_基础知识

线程进程并发并行


一、线程与进程

进程(process):简单对其理解就是一个应用程序的实例

  • 深奥点的解释就是: 进程是CPU资源分配的最小单位
    • 也就是CPU会为每个应用程序单独分配一块内存空间,该进程在内存空间是独立的、受保护的,里面存储了什么文本区域、数据区域、堆栈等等
    • 如果想实现多个进程互相访问,好像要用到什么共享内存或者是socket技术
  • 其他特性:
    • 一个进程包括1~n个线程

线程(thread):而线程可以说是组合在进程类的一个个对象,共享本进程中的数据

  • 深奥点的解释就是:线程是CPU调度的最小单位
    • 所以它可以说是一段段执行流用于对进程中的数据进行处理,所以说一个进程至少有一个线程
    • 将各个线程切分成一段段时间片,然后交由CPU进行调度
  • 其他特性:
    • 可以对进程的某块内存区域设置锁,当A线程进来之后上了锁,那么其他线程必须排队等待锁释放。专业术语叫做互斥锁 (Mutual exclusion,缩写 Mutex)
    • 也可以对进程的某块内存区域设置限定的访问数量,比如设置了3把钥匙,如果当前内存已经有三个线程在操作,那么其他线程进来前就要排队等待,返回钥匙。这种做法专业术语叫做信号量 (Semaphore)
      • 可以看出互斥锁是信号量的一种特殊情况,当只有一把钥匙时

二、并行与并发

并行是从微观上,精确到某一时刻,存在多段执行流在同时执行

并发是宏观上,CPU执行速度飞快,正常人无法感知到,以为是在并行执行

并发实现:指在单核CPU处理器上,存在多个进程 / 线程时,多个进程 / 线程 “轮流”使用单个CPU资源

并行实现:指在多核CPU处理器

  • 同一个进程下的不同线程分别在不同的核处理器上,在同一时刻可以并行执行

SO:能知道CPU核数量也是很重要,Java基础类库lang包下提供了一种快速查询CPU逻辑处理器数量的方法

System.out.println(Runtime.getRuntime().availableProcessors());  // me out: 8

三、线程的几种状态

Java层面的线程状态

  • Thread类下存在这样一个内部枚举State
public enum State {
    // 新生
    NEW,
    // 运行
    RUNNABLE,
    // 阻塞
    BLOCKED,
    // 等待
    WAITING,
    // 计时等待
    TIMED_WAITING,
    // 终止
    TERMINATED;
}

四、Java类库中wait与sleep区别

  1. 所属类区别
    • wait方法来自于Object类,所以Java任何类都有该方法
    • sleep方法来自于Thread
      • 但是注意企业开发中做休眠,不会使用Thead.sleep,而是使用JUC并发包下的TimeUnit
  2. 锁释放区别
    • wait方法会释放锁
    • sleep方法不会释放:因为它的作用就是让线程休眠
  3. 使用范围不同
    • wait方法只能使用在同步代码块中。原因是它不仅会拿锁还会释放锁,锁要有归还的位置
    • sleep方法应用于任何地方
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值