java复习笔记-进程、线程和同步锁

一.进程与线程
1.什么是程序?什么是进程?
程序是一个静态的指令集合
进程是正在运行的程序,它代表了程序所占用的内存区域
进程拥有三个特性,独立性,动态性和并发性
独立行的指值每个进程都拥有自己私有的地址空间,在没有经过进程本身的允许下,一个用户进程不可以直接访问其他进程的地址空间。
动态性是指进程是一个正在系统中活动的指令集合,具有自己的生命周期和不同的各种状态。
并发性是指多个进程可以在单个处理器CPU上进行并发执行,多个进程不会互相影响

2.什么是线程?
线程是操作系统能够进行运算调度的最小单位。

3.进程与线程之间有什么关系?
进程之中包含了线程,并且线程是进程中实际运作单位。
一个进程可以开启多个线程,其中一个主线程用来调用本进程中的其他线程
进程的切换也可以看做是不同进程的主线程在切换

4.多线程有哪些特性?
  1)随机性:线程的随机性是指同一时刻只有一个程序在运行
  2)CPU分时调度:在线程中,CPU会分配给每个线程一个时间段,称作是它的时间片,即该线程被允许运行的时间。
若时间片用完线程还在运行,CPU将剥夺分配给另一个线程,将当前线程挂起
如果线程在时间片用完之前阻塞或者结束,那CPU则会立即进行切换运行其他线程
操作系统执行哪些线程有自己内部的规则,分别是FCFS(First Come First Service 先来先服务算法)和SJS(Short Job Service 短服务算法)
  3)线程的状态
线程在生命周期有五种不同的状态,分别是:
新建状态:当线程对象创建后就进入了新建状态,如:Thread t = new MyThread();
就绪状态:当调用线程对象的start()方法,线程即为进入就绪状态。当线程处于此状态时,只是说明线程做好了准备,随时等待CPU调度执行,并不是执行了start()方法此线程就会立即执行。
运行状态:当CPU调度了处于就绪状态的线程,此线程就会进入到运行状态。
阻塞状态:处于运行状态中的线程会由于某些原因,暂时放弃对CPU的使用权,停止执行,此时进入阻塞状态,知道其进入就绪状态才有机会被CPU选中再次执行
根据阻塞状态山城的原因不通过,阻塞状态又可以细分为三种。
等待阻塞:运行状态的线程记性wait()方法,本线程进入到等待阻塞状态。
同步阻塞:线程在获取synchronized同步锁失败(因为锁被其他线程占用),它就会进入同步阻塞状态。
其他阻塞:调用线程的slepp()方法或者join()方法或发出了I/O请求时,线程就会进入到阻塞状态,当sleep()状态超时,join()等待线程终止或者超时或者I/O处理完毕时线程重新转入就绪状态。
死亡状态:线程执行完毕或者因为异常退出了run()方法,该线程结束生命周期。
线程之间状态的切换:
就绪 → 执行:为就绪线程分配CPU即可变为执行状态"
执行 → 就绪:正在执行的线程由于时间片用完被剥夺CPU暂停执行,就变为就绪状态
执行 → 阻塞:由于发生某事件,使正在执行的线程受阻,无法执行,则由执行变为阻塞
反之,如果获得了之前需要的资源,则由阻塞变为就绪状态,等待分配CPU再次执行

5.多线程实现的方式有哪些?
  方案一:继承Thread类
1.自定义一个类extends Thread
2.在run()方法重写业务
3.创建线程对象
4.调用start()

方案二:实现Runnable接口
1.自定义一个类implements Runnable
2.实现接口中未实现的run()
3.打印线程名称:Thread.currentThread().getName()
4.创建目标业务对象-实现接口类的对象-包含的是我们的业务
5.创建线程对象-THread t1 = new Thread(target)
6.通过线程对象调用start()

方案三:线程池ExecutorService
常用方法是newFixedThreadPool(int)
这个方法可以创建指定线程数目的线程池对象
创建出来的线程池对象是ExecutorService:用来存储线程的池子,负责:新建/启动/关闭线程
execute()让线程池中的线程来执行业务,每次调用都会将一个线程加入到就绪队列

二.同步锁
1.同步锁是为了解决多线程中的数据安全问题。
多线程中出现数据安全问题的满足条件:
  1.有一个多线程程序
  2.多个线程拥有共享数据
  3.多条语句操作共享数据

2.解决方案:加锁synchronized
1.同步代码块(常用),格式:synchronized(唯一的锁对象){可能出现数据安全问题的所有代码}
2.同步方法(不常用),格式:在方法的定义上加synchronized

3.使用同步锁的注意事项:
  1)锁对象必须唯一
  2)锁对象的类型不做限制,只要能保证唯一即可
  3)加锁的的范围需要认真考虑,不能太大,会浪费效率,不能太小,会锁不住
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值