线程状态图

线程的状态图

 

 

1.解释线程和进程的区别?
<1>线程的尺度划分小于进程,线程隶属于某个进程。
<2>进程是程序的一种动态形式,是CPU,内存等资源占用的基本单位
,而线程是不能独立的占有这些资源的
<3>进程之间相互独立,通信比较困难,而线程之间共享一块内存区域,通信方便。线程是CPU调度的基本单位
<4>进程在执行过程中,包含比较固定的入口、执行顺序和出口,而线程的这些过程会被应用程序所控制。

2.如何让一个类成为线程类?
<1>实现java.lang.Runnable接口
<2>继承java.lang.Thread类

3.简述线程的几种状态?
1). 新建状态(New):用new语句创建的线程对象处于新建状态,此时它和其他Java对象一样;仅在堆区中被分配了内存;
2). 就绪状态(Runnable):当一个线程对象创建后,其他线程调用它的start()方法,
该线程就进入就绪状态,Java虚拟机会为它创建方法调用栈。
处于这个状态的线程位于可运行池中, 等待获得CPU的使用权。
3). 运行状态(Running):处于这个状态的线程占用CPU,执行程序代码。在并发运行环境中,如果计算机只有一个CPU,
那么任何时刻只会有一个.线程处于这个状态。如果计算机有多个CPU, 那么同一时刻可以让几个线程占用不同的CPU,使它们都处于运行状态。只有处于就绪状态的线程才有机会转到运行状态。
4). 阻塞状态(Blocked):指线程因为某些原因放弃CPU, 暂时停止运行。
当线程处于阻塞状态时,Java虚拟机不会给线程分配CPU,直到线程重新进入就绪状态,
它才有机会转到运行状态。
5). 死亡状态(Dead):当线程退出run()方法时,就进入死亡状态,该线程结束生命周期。
线程有可能是正常执行完run()方法退出,也有可能是遇到异常而退出。
不管线程正常结束还是异常结束,都不会对其他线程造成影响。

4.sleep() 和 wait() 有什么区别?
sleep()是线程类方法,导致线程暂定执行指定的时间,将执行机会让给其他线程,
不会释放对象的锁
wait()是Object类方法,导致本线程放弃对象锁,只有执行notify或notifyAll方法后,
才能获得对象锁进入就绪再到运行状态

5.启动一个线程是调用run()还是start()方法?
启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,
这意味着它可以由JVM 调度并执行,
这并不意味着线程就会立即运行。run()方法是线程启动后要进行回调(callback)的方法。

posted @ 2019-08-19 15:21  [浪子回头]  阅读(438)  评论(0编辑  收藏  举报