实习生面试java开发的时候被面试官问,什么是线程安全,该怎么回答呢
1.首先明确什么情况会出现线程安全问题,在多线程并发执行时会出现,一个线程的变量会被其他线程访问或修改
2.如何保证线程安全,加锁,一个线程运行过程中,其他线程拿不到锁,就无法使用资源来运行自身代码,从而也不会影响其他线程的执行
3.JAVA中的具体方法,使用synized,单词写错了,关键字锁住代码快或方法,或者使用lock加锁等,或者使用一些线程安全的类,如集合安全类currenthashmap等等
4.延伸回答,JAVA中的锁有哪些,具体查阅资料看看
5.答完,面试官这一块绝对没话说了
如果是我,我会这么回答:
线程安全就是在多个线程中,当某个线程去访问它们所共有的资源时,其它线程将进行等待,直到该线程访问完毕才轮到其它线程进行访问,这就是线程安全。举个例子,某层楼有一间厕所,有三个人要去上厕所,这个时候甲先进了厕所,并把门锁了,其它人则需要在外面等待,直到甲上完厕所,其它两个人才能进去厕所。
这是我的个人理解,可能会有些偏差。
1.对于只有一步原子操作的访问,不存在线程安全问题。
2.只是查询资源的话,不存在线程安全问题。
3.对于含有对资源更新的两步以上的操作,
如果能保证线程1完成所有操作后,线程2开始进行操作,则是线程安全的。
否则则是线程不安全的。
比如,对于一组操作
update();
select();
如果第一个线程承执行select的时候,第二个线程先执行了update,则select出的结果是不正确的,也就是线程不安全。