关于java:java基础面试题整理3线程

4次阅读

共计 1803 个字符,预计需要花费 5 分钟才能阅读完成。

1. 过程和线程

1. 过程

过程就是正在运行的程序, 它代表了程序所占用的内存区域

2. 过程的特点

1). 独立性
过程是零碎中独立存在的实体, 它能够领有本人独立的资源, 每个过程都领有本人公有的地址空间, 在没有通过过程自身容许的状况下, 一个用户过程不能够间接拜访其余过程的地址空间
2). 动态性
过程与程序的区别在于, 程序只是一个动态的指令汇合, 而过程是一个正在零碎中流动的指令汇合, 程序退出了工夫的概念当前, 称为过程, 具备本人的生命周期和各种不同的状态, 这些概念都是程序所不具备的.
3). 并发性
多个过程能够在单个处理器 CPU 上并发执行, 多个过程之间不会相互影响.

3. 线程

线程是操作系统 OS 可能进行运算调度的最小单位, 它被蕴含在过程之中, 是过程中的理论运作单位.
一个过程能够开启多个线程, 其中有一个主线程来调用本过程中的其余线程
咱们看到的过程的切换,切换的也是不同过程的主线程
多线程扩大了多过程的概念, 使的同一个过程能够同时并发解决多个工作

4. 过程和线程的关系

一个操作系统中能够有多个过程, 一个过程中能够蕴含一个线程 (单线程程序), 也能够蕴含多
每个线程在共享同一个过程中的内存的同时, 又有本人独立的内存空间.
所以想应用线程技术, 得先有过程, 过程的创立是 OS 操作系统来创立的, 个别都是 C 或者 C ++ 实现

5. 线程的状态

1. 线程的五态模型

1). 创立状态: 线程的创立比较复杂, 须要先申请 PCB, 而后为该线程运行调配必须的资源, 并将该线程转为就绪状态插入到就绪队列中
2). 就绪(可运行) 状态:线程曾经筹备好运行,只有取得 CPU,就可立刻执行
3). 执行(运行) 状态:线程曾经取得 CPU,其程序正在运行的状态
4). 阻塞状态:正在运行的线程因为某些事件(I/ O 申请等)临时无奈执行的状态,即线程执行阻塞
5). 终止状态: 期待 OS 进行善后处理, 最初将 PCB 清零, 并将 PCB 返回给零碎

  就绪 → 执行: 为就绪线程调配 CPU 即可变为执行状态.
  执行 → 就绪: 正在执行的线程因为工夫片用完被剥夺 CPU 暂停执行, 就变为就 
         绪状态.
  执行 → 阻塞: 因为产生某事件, 使正在执行的线程碰壁, 无奈执行, 则由执行 
         变为阻塞.
  (例如线程正在拜访临界资源, 而资源正在被其余线程拜访)
  反之, 如果取得了之前须要的资源, 则由阻塞变为就绪状态, 期待调配 CPU 再次 
  执行.

2. 线程状态与代码对照

线程生命周期, 次要有五种状态:
1). 新建状态 (New) : 当线程对象创立后就进入了新建状态. 如:Thread t = new MyThread();
2). 就绪状态(Runnable): 当调用线程对象的 start() 办法, 线程即为进入就绪状态.
处于就绪 (可运行) 状态的线程, 只是阐明线程曾经做好筹备, 随时期待 CPU 调度执行, 并不是执行了 t.start()此线程立刻就会执行
3). 运行状态(Running): 当 CPU 调度了处于就绪状态的线程时, 此线程才是真正的执行, 即进入到运行状态. 就绪状态是进入运行状态的惟一入口, 也就是线程想要进入运行状态状态执行, 先得处于就绪状态
4). 阻塞状态(Blocked): 处于运状态中的线程因为某种原因, 临时放弃对 CPU 的使用权, 进行执行, 此时进入阻塞状态, 直到其进入就绪状态才有机会被 CPU 选中再次执行.
* 依据阻塞状态产生的起因不同, 阻塞状态又能够细分成三种:
— 期待阻塞: 运行状态中的线程执行 wait()办法, 本线程进入到期待阻塞状态
— 同步阻塞: 线程在获取 synchronized 同步锁失败(因为锁被其余线程占用), 它会进入同步阻塞状态
— 其余阻塞: 调用线程的 sleep() 或者 join()或收回了 I / O 申请时, 线程会进入到阻塞状态. 当 sleep()状态超时.join()期待线程终止或者超时或者 I / O 处理完毕时线程从新转入就绪状态
5). 死亡状态(Dead): 线程执行完了或者因异样退出了 run() 办法, 该线程完结生命周期

6. 你晓得的线程的办法?

1.join(): 合并以后线程相当于办法的调用
2.yield(): 让出 CPU
3.wait(): 使一个线程处于期待状态,并且 开释所持有的对象 lock
4.sleep(): 是线程类 Thread 办法,导致线程暂停,而后给定工夫,让出 cpu 给其余线程,然而 不会开释对象锁,工夫到了复原。
5.notify(): 唤醒一个处于期待状态的线程,留神这里不是给所有唤醒线程一个对象的锁 而是让他们竞争。

7. 实现多线程的两种形式

8. 实现线程平安的两种形式

正文完
 0