1.根据线程安全的相关知识,分析以下代码,当调⽤test⽅法时i>10时是否会引起死锁?并简要说 明理由。
public void test(int i)
{lock(this){if (i>10){i--;test(i);}}
}
不会发⽣死锁,(但有⼀点int是按值传递的,所以每次改变的都只是⼀个副本,因此不会出现死锁。
但如果把int换做⼀个object,那么死锁会发⽣)。
2.描述线程与进程的区别?
线程(Thread)与进程(Process)⼆者都定义了某种边界,不同的是进程定义的是应⽤程序与应⽤程序 之间的边界,不同的进程之间不能共享代码和数据空间,⽽线程定义的是代码执⾏堆栈和执⾏上下⽂的 边界。
⼀个进程可以包括若⼲个线程,同时创建多个线程来完成某项任务,便是多线程。
⽽同⼀进程中的不同线程共享代码和数据空间。
⽤⼀个⽐喻来说,如果⼀个家庭代表⼀个进程,在家庭 内部,各个成员就是线程,家庭中的每个成员都有义务对家庭的财富进⾏积累,同时也有权利对家庭财 富进⾏消费,当⾯对⼀个任务的时候,家庭也可以派出⼏个成员来协同完成,⽽家庭之外的⼈则没有办 法直接消费不属于⾃⼰家庭的财产。
3.Windows单个进程所能访问的最⼤内存量是多少?它与系统的最⼤虚拟内存⼀样吗?
这对于系 统设计有什么影响?
这个需要针对硬件平台,公式为单个进程能访问的最⼤内存量=2的处理器位数次⽅/2,⽐如通常情况 下,32位处理器下,单个进程所能访问的最⼤内存量为:232 /2 = 2G 。
单个进程能访问的最⼤内存量 是最⼤虚拟内存的1/2,因为要分配给操作系统⼀半虚拟内存。
4.using() 语法有⽤吗?什么是IDisposable?
有⽤,实现了IDisposiable的类在using中创建,using结束后会⾃定调⽤该对象的Dispose⽅法,释放资 源。
5.前台线程和后台线程有什么区别?
通过将 Thread.IsBackground 属性设置为 true,就可以将线程指定为后台线程 。
前台线程: 应⽤必须结束掉所有的前台线程才能结束程序,只要有⼀个前台线程没退出进程就不会⾃动 退出,当然线程是依附在进程上的,所以你直接把进程KO掉了的话⾃然所有前台线程也会退出。
后台线程: 进程可以不考虑后台直接⾃动退出,进程⾃动退出后所有的后台线程也会⾃动销毁。
6.什么是互斥?
当多个线程访问同⼀个全局变量,或者同⼀个资源(⽐如打印机)的时候,需要进⾏线程间的互斥操作来 保证访问的安全性。
7.如何查看和设置线程池的上下限?
线程池的线程数是有限制的,通常情况下,我们⽆需修改默认的配置。
但在⼀些场合,我们可能需要了 解线程池的上下限和剩余的线程数。
线程池作为⼀个缓冲池,有着其上下限。
在通常情况下