Javase复习系列——线程与并发

cho1.基本问题

  1. 什么是进程
    程序执行时的一个实例,系统为每个进程分配不同的内存区域。
  2. 什么是线程
    进程中包括一个或多个线程,线程切换的开销小。
  3. 什么是多线程
    并行执行多个线程。
    4.学习要点
  • 多写代码练习,多次观察运行结果。
  • 理解时候利用画图,思路会比较清晰。
  • 线程并发是重点(这里我没有细说,后面补充)

cho2.CPU资源分配

CPU资源分配

  • 系统中存在多个进程,CPU为每个进程分配内存区域。
  • 进程获得的内存区域具有共享区域,每个线程具有各自独立的栈区。
  • 共享区域分为三段:
  1. 代码段:存放代码、常量。
  2. 数据段:存放全局变量、静态变量。
  3. 扩展段:堆存储。
  • 线程的栈区存储着线程内的局部变量、临时变量。

cho3.三种线程分布

线程分布

  1. 单线程程序
    一个简单那的程序,只具有一个基本的main线程。所有的程序一定存在一个主线程。
  2. 基本Java程序
    Java程序本身具有垃圾回收机制和异常机制。因此,基本的Java程序,具有以下三个线程:
  • main:主线程。
  • gc:垃圾回收线程。
  • exception:异常处理线程。
  1. 多线程Java程序
    在基本的Java程序基础上,增加多个线程。

cho4.守护线程&用户线程

守护线程与用户线程

  • 线程分为两类:守护线程、用户线程。
  • 守护线程为用户线程服务,用户线程使用setDeamon(true),可以将用户线程设置为守护线程。
  • 常见的守护线程:垃圾回收线程。
  • 当JVM中只存在守护线程,则JVM退出;守护线程会随主线程一起消亡。

cho5.线程的生命周期

参考链接多线程(一):创建线程和线程的常用方法
线程的生命周期
这里只做简略描述,更多细节可以去参考链接中查看,本部分很多内容都借鉴了该链接。

线程的创建

方式一:(不推荐)

  1. 继承Thread类。
  2. 重写run方法。
  3. 创建线程对象。
  4. 调用start方法:启动线程,调用run方法。

方式二:(线程无返回值)
1)实现Runnable接口。
2) 重写run方法。
3) 通过含参构造器创建线程对象。
4) 调用start方法
Thread implements Runnable

方式三:(线程有返回值)
1)实现Callable接口。
2)重写call方法。
3)使用FutureTask封装线程对象。
4)使用Thread封装futureTask对象。
5)调用start方法。
FutureTask implements RunnableFuture
RunnableFuture extends Runnable

线程的调度

  1. 线程调度策略:优先级高的线程,抢占CPU资源。
  2. 调度方法:
  • 优先级相同,按照等待队列先进先出。
  • 优先级高,优先调度抢占策略。
  1. 优先级范围1(Min)-10(Max)
  2. 相关方法:getPriority/setPriority
  3. 子类线程继承父类线程的优先级。

cho6.常用方法一览

方法名说明
start启动一个线程,将线程加入线程队列
run线程的主体操作内容,即线程体
getName获取线程名称
setName设置线程名称
currentThread返回当前线程实例
sleep线程进入休眠,保留同步锁
interrupt打断线程休眠,进入就绪状态
wait线程进入等待状态,释放同步锁。该方法必须写在synchronized内。
notify唤醒休眠或者等待的线程。该方法必须写在synchronized内。
join若在A线程执行时,调用了B线程的join,则A线程等待阻塞,直到B线程结束,A线程才会进入执行状态。
yield让线程进入就绪状态,不会释放锁。
setDaemon将线程设置为守护线程。

多线程的三个案例

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值