1.简介、线程安全性、对象的共享

2018-10-31  本文已影响0人  tangyu_tyty

一、QA

1、为什么要在计算机中加入操作系统?

2、不同进程之间如何通信?

套接字、信号处理器、共享内存、信号量以及文件等。

3、为什么会出现线程?

进程的出现因素(资源利用率、公平性以及便利性等)同样也是促使线程出现的原因。线程运行在同一个进程中同时存在多个程序控制流。
线程会共享进程范围内的资源,例如内存句柄和文件句柄,但每个线程都有各自的程序计数器、栈以及局部变量等。

4、为什么要使用多线程,它的优势是什么?

5、使用多线程有什么风险?

6、怎样判断一个类是线程安全的?

7、什么是竞态条件?

当某个计算的正确性取决于多个线程的交替执行时序时,那么就会发生竞态条件。最常见的竞态条件类型就是“先检查后执行(check-then-act)”操作,即通过一个可能失效的观测结果来决定下一步的动作。

8、多线程环境下读取变量时要不要同步?

当程序在没有同步的情况下读取变量时,可能会得到一个失效的值,但至少这个值是由之前某个线程设置的值,而不是一个随机值。这种安全性保证被称为最低安全性。最低安全性适用于绝大多数变量,但是存在一个例外:非volatile类型的64位数值变量(double和long)。java内存模型要求,变量的读取操作和写入操作都必须是原子操作,但是对于非volatile类型的long和double变量,jvm允许将64位的读操作或写操作分解为两个32位操作。当读取一个非volatile类型的long变量时,如果对该变量的读操作和写操作在不同的线程中执行,那么很可能会读取到某个值得高32位和另一个值的低32位。因此,即使不考虑失效数据问题,在多线程程序中使用共享变量且可变的long和double等类型的变量也是不安全的,除非用关键字volatile来声明他们,或者用锁保护起来。

9、volatile关键字的作用是什么?

10、什么是逸出?

当某个不该被发布的对象被发布时,这种情况就被称为逸出(Escape)。

11、如何方式逸出?

12、什么是不可变对象?

13、被final修饰的域除了不能被修改还有什么作用?

java内存模型规定,final域能确保初始化过程的安全性,从而可以不受限制的访问不可变对象,并在共享这些对象时无须同步。

14、怎样安全的发布一个对象?

15、在并发程序中使用和共享对象时,有哪些方案可以保证线程安全?

16、线程封闭有哪些种方式?

二、其他

上一篇下一篇

猜你喜欢

热点阅读