黑马程序员技术交流社区

标题: 为什么在集合未使用泛型时会出现安全问题?这个与线程... [打印本页]

作者: 黄成超    时间: 2013-1-30 14:55
标题: 为什么在集合未使用泛型时会出现安全问题?这个与线程...
为什么在集合未使用泛型时会出现安全问题?这个与线程产生的安全问题有什么不同?

作者: 谢毅    时间: 2013-1-30 16:01
java5以前集合内部不能确定对象类型,泛型出现后可以在编译期就确定集合中的对象类型,统一类型后在取对象的时候可以省略类型强转的步骤。
在没泛型的时候当一个开发人员接收到一个集合,他并不知道里面的每个对象是什么类型,这样在取出对象时就容易发生强转安全错误。而这个错误
和线程的安全问题是不同的,线程的安全问题指的是多个线程在操作集合里的对象时如果没进行同步处理,就会出错。这里强调的是对象包含的具体数据,前者强调的是
对象本身的类型。
作者: 刘郑瑞    时间: 2013-1-30 18:14
个人认为,简单的说泛型是给编译器看的,避免了一些类型转化的错误。线程的安全是访问导致的死锁或者不同步。这两个安全问题,本质上扯不上关系。
作者: 念满    时间: 2013-1-30 20:18
泛型安全问题,是编译器的一种有好提醒;
早期集合不使用泛型,集合可以存储各种数据,但是每一种类型数据可有自己的特有方法,加入你不小心使用到元素类型的特有方法时,
容易出错(ArrayList集合里装有abc,再装1;迭代集合,你把元素强转成String打印,就会有类型转换异常);泛型避免了强制转换的麻烦,
把运行期间出现的问题转移到编译期间,方便解决问题

线程安全问题,若出现线程安全,则代表代码有问题,是一种错误;
多线程安全问题通常是由于多条语句在操作共享数据,一个线程还没执行完,另一个线程参与执行,导致共享数据错误
如卖票,A窗口正在卖第一张票,是在只需要打印票的时候,停止执行卖票了;此时B窗口也进来卖票了,它发现第一张票
没卖出去,它也会卖第一张;结果会出现2张一模一样的票
解决方法是:对多条语句操作共享数据语句,只让一个线程执行完,在执行过程中,让其他线程不可参与执行;通常用同步解决




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2