[关闭]
@lzb1096101803 2016-03-14T16:39:13.000000Z 字数 1029 阅读 479

线程相关

电话面试


什么是线程安全?

如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。一个线程安全的计数器类的同一个实例对象在被多个线程使用的情况下也不会出现计算失误。很显然你可以将集合类分成两组,线程安全和非线程安全的。。

什么是线程

线程是CPU分配和调度的基本单位,它被包含在进程之中,是进程中的实际运作单位。

线程和进程有什么区别?

程序:一组指令的有序结合
进程:系统进行资源分配和调度的基本单位,
线程:CPU进行调度和分派的基本单位,本身不拥有系统资源,只拥有一点在运行中必不可少的资源(程序计数器,一组寄存器和栈),一个线程可以创建和撤销另一个线程,同一进程中的多个线程之间可以并发执行。
进程切换代价大,线程切换代价小
每个线程拥有独立的内存空间,而线程可以理解为程序中一段程序片段的执行

线程的执行特性。

线程只有 3 个基本状态:就绪,执行,阻塞。

线程存在 5 种基本操作来切换线程的状态:派生,阻塞,激活,调度,结束。
一般来讲(不使用特殊技术)进程是无法突破进程边界存取其他进程内的存储空间;而线程由于处于进程空间内,所以同一进程所产生的线程共享同一内存空间。 同一进程中的两段代码不能够同时执行,除非引入线程。 线程是属于进程的,当进程退出时该进程所产生的线程都会被强制退出并清除。 线程占用的资源要少于进程所占用的资源。 进程和线程都可以有优先级。 在线程系统中进程也是一个线程。可以将进程理解为一个程序的第一个线程。

概括的解释下线程的几种可用状态。

就绪(Runnable):线程准备运行,不一定立马就能开始执行。
运行(Running):进程正在执行线程的代码。
阻塞(Waiting):线程处于阻塞的状态,等待外部的处理结束。
睡眠(Sleeping):线程被强制睡眠。
I/O阻塞(Blocked on I/O):等待I/O操作完成。
同步阻塞(Blocked on Synchronization):等待获取锁。
死亡(Dead):线程完成了执行。

什么是死锁

死锁就是两个或两个以上的线程被无限的阻塞,线程之间相互等待所需资源。这种情况可能发生在当两个线程尝试获取其它资源的锁,而每个线程又陷入无限等待其它资源锁的释放,除非一个用户进程被终止。
会举例
http://blog.csdn.net/rebelqsp/article/details/23550019

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注