【那些年遇到过的面试题】线程安全
2016-07-19 15:18
288 查看
线程安全:是指如果一段代码所在的进程中又多个线程在同时运行,这些线程可能会同时运行这段代码,如果每次运行的结果和单线程运行的结果是一样的,而且其他的变量的值也和预期是一样的,就是线程安全的。
可能引起线程问题的是:全局变量和静态变量。
如何做到线程安全:
1)显式开启新的线程和关闭线程;
2)对共享数据的修改要加线程锁,一定要及时释放,防止死锁;
3)线程见需要传递数据时,阻塞当前线程时,设置下一线程合适等待时间。
线程共享的环境包括:进程代码段、进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯)、进程打开的文件描述符、信号的处理器、进程的当前目录和进程用户ID与进程组ID。
Vector:是线程安全的 。 Vector的所有操作方法都被同步了,多个线程就不可能同时访问vector中的数据,只能一个一个地访问,所以不会出现数据混乱的情况,所以是线程安全的。
ArrayList、LinkedList、HashMap等都是线程非安全的类
http://www.tuicool.com/articles/VRVFZb 40个多线程问题总结
线程安全:是指如果一段代码所在的进程中又多个线程在同时运行,这些线程可能会同时运行这段代码,如果每次运行的结果和单线程运行的结果是一样的,而且其他的变量的值也和预期是一样的,就是线程安全的。
可能引起线程问题的是:全局变量和静态变量。
如何做到线程安全:
1)显式开启新的线程和关闭线程;
2)对共享数据的修改要加线程锁,一定要及时释放,防止死锁;
3)线程见需要传递数据时,阻塞当前线程时,设置下一线程合适等待时间。
线程共享的环境包括:进程代码段、进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯)、进程打开的文件描述符、信号的处理器、进程的当前目录和进程用户ID与进程组ID。
Vector:是线程安全的 。 Vector的所有操作方法都被同步了,多个线程就不可能同时访问vector中的数据,只能一个一个地访问,所以不会出现数据混乱的情况,所以是线程安全的。
ArrayList、LinkedList、HashMap等都是线程非安全的类
http://www.tuicool.com/articles/VRVFZb 40个多线程问题总结
相关文章推荐
- iOS面试题整理
- .NET程序员走向高端必读书单汇总
- ConcurrentHashMap深入分析
- Sql常见面试题(总结)
- HashTable和HashMap分析
- 【面试编程题】4:从尾到头打印链表
- 面试题
- 【那些年遇到过的面试题】阻塞 非阻塞 同步 异步 I/O 模型
- 面试浅谈
- 【面试编程题】3-二维数组中的查找
- Android面试总结
- 经典算法面试题目-判断一个字符串中的字符是否唯一(1.1)
- 经典算法面试题目-判断一个字符串中的字符是否唯一(1.1)
- .NET程序员走向高端必读书单汇总
- 拥有别人拿不走的东西
- 替换空格
- 排序算法总结及面试题
- 15个顶级Java多线程面试题及回答
- java程序员最常犯的错误
- 教你如何迅速秒杀掉:99%的海量数据处理面试题