【Java并发】(1)多线程基础

1. 进程与线程

  • 进程定义:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位
  • 线程定义:现代操作系统调度的最小单元是线程,也叫轻量级进程,在一个进程里可以创建多个线程,这些线程都拥有各自的计数器、堆栈和局部变量等属性,并且能够访问共享的内存变量。
  • Java进程与线程的关系?
    在Java中,当我们启动main函数时,就启动了一个JVM的进程,其中包括几个同时运行的线程,main函数的执行位于其中一个线程中。
    多个线程共享进程的堆和方法区(元空间),同时每个线程有自己的程序计数器、虚拟机栈、本地方法栈
  • 进程与线程的区别?
    进程之间基本上是独立的,有利于资源管理和保护,进程执行开销大;而线程则相反,同一进程中的线程可能会相互影响。

2.多线程的优点和挑战

  • 为什么要使用多线程?
    a. 线程间的切换和调度远小于进程,多线程在多核CPU上同时运行会减少线程上下文切换的开销。
    b.多线程机制可以提高系统整体的并发能力和性能,满足高并发量下的业务需求,提高程序的执行效率和运行速度。
  • 使用多线程有哪些挑战?
    a. 上下文切换:CPU在线程间切换执行时,需要保存线程状态,这带来了一定的时间和空间开销,因此应该尽量减少上下文切换的次数。
    b.死锁:两个线程互相等待对方释放锁,这会造成系统不可用,应该避免死锁发生。
    c.资源限制:程序的执行速度受限于计算机硬件资源或软件资源,这时开更多线程也没用,需要根据不同的资源限制调整 程序的并发度。

3. Java线程的生命周期(状态)

  • NEW
    NEW(初始)状态,线程被构建,即new Thread()
  • RUNNABLE
    thread.start()后,进入RUNNABLE(运行)状态,该状态包括两种可能:如果线程获得了CPU时间片那么其处于操作系统定义的运行中状态,否则处于操作系统定义的就绪状态,JVM将这两种状态统称为运行状态
  • BLOCKED
    如果线程需要进入同步方法或同步代码块,即需要获取锁,但需要等待锁被释放时,进入BLOCKED(阻塞)状态
  • WAITING
    线程执行wait()方法后,进入WAITING(等待)状态,需要依靠其他线程的通知才能返回运行状态。
  • TIME_WAITING
    线程执行sleep(millis),wait(millis)方法后,进入TIME_WAITING(超时等待)状态,当时间到达后,线程会自动返回RUNNABLE状态。
  • TERMINATED
    线程的run方法执行完成后或者产生异常后进入TERMINATED(终止)状态。
图片引用自方腾飞 魏鹏 程晓明《Java并发编程的艺术》机械工业出版社
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值