A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

为什么在集合未使用泛型时会出现安全问题?这个与线程产生的安全问题有什么不同?

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

4 个回复

倒序浏览
java5以前集合内部不能确定对象类型,泛型出现后可以在编译期就确定集合中的对象类型,统一类型后在取对象的时候可以省略类型强转的步骤。
在没泛型的时候当一个开发人员接收到一个集合,他并不知道里面的每个对象是什么类型,这样在取出对象时就容易发生强转安全错误。而这个错误
和线程的安全问题是不同的,线程的安全问题指的是多个线程在操作集合里的对象时如果没进行同步处理,就会出错。这里强调的是对象包含的具体数据,前者强调的是
对象本身的类型。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
个人认为,简单的说泛型是给编译器看的,避免了一些类型转化的错误。线程的安全是访问导致的死锁或者不同步。这两个安全问题,本质上扯不上关系。
回复 使用道具 举报
泛型安全问题,是编译器的一种有好提醒;
早期集合不使用泛型,集合可以存储各种数据,但是每一种类型数据可有自己的特有方法,加入你不小心使用到元素类型的特有方法时,
容易出错(ArrayList集合里装有abc,再装1;迭代集合,你把元素强转成String打印,就会有类型转换异常);泛型避免了强制转换的麻烦,
把运行期间出现的问题转移到编译期间,方便解决问题

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

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马