栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在线程之间传递对象时可以使用instanceof吗?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在线程之间传递对象时可以使用instanceof吗?

这与线程无关,仅与类加载器有关。当由不同的类加载器加载相同的类定义时,JVM将其视为两个不同的类。所以

instanceof
两者之间的强制转换失败。

因此,要回答您的原始问题: 在同一个类加载器加载的 线程之间传递对象是安全的,

instanceof
等等。工作良好。

这是有关类加载问题的文章。

更新Romain的评论

以下是一些测试的行为的代码

instanceof

URL[] urls = new URL[] {new File("build/classes/").toURL()};ClassLoader loader1 = new URLClassLoader(urls, null);ClassLoader loader2 = new URLClassLoader(urls, null);Class<?> c1 = loader1.loadClass("net.torokpeter.Foo");Class<?> c2 = loader2.loadClass("net.torokpeter.Foo");Object foo1 = c1.newInstance();Object foo2 = c2.newInstance();System.out.println("c1.toString(): " + c1);System.out.println("c2.toString(): " + c2);System.out.println("c1.equals(c2): " + c1.equals(c2));System.out.println("c1 == c2: " + (c1 == c2));System.out.println("foo1: " + foo1);System.out.println("foo2: " + foo2);System.out.println("foo1 instanceof Foo: " + (foo1 instanceof Foo));System.out.println("foo2 instanceof Foo: " + (foo2 instanceof Foo));System.out.println("c1.isAssignableFrom(c1): " + c1.isAssignableFrom(c1));System.out.println("c2.isAssignableFrom(c2): " + c2.isAssignableFrom(c2));System.out.println("c1.isAssignableFrom(c2): " + c1.isAssignableFrom(c2));System.out.println("c2.isAssignableFrom(c1): " + c2.isAssignableFrom(c1));System.out.println("c1.isAssignableFrom(Foo.class): " + c1.isAssignableFrom(Foo.class));System.out.println("c2.isAssignableFrom(Foo.class): " + c2.isAssignableFrom(Foo.class));System.out.println("Foo.class.isAssignableFrom(c1): " + Foo.class.isAssignableFrom(c1));System.out.println("Foo.class.isAssignableFrom(c2): " + Foo.class.isAssignableFrom(c2));

输出为(在Eclipse中,Java5):

c1.toString(): class net.torokpeter.Fooc2.toString(): class net.torokpeter.Fooc1.equals(c2): falsec1 == c2: falsefoo1: net.torokpeter.Foo@360be0foo2: net.torokpeter.Foo@45a877foo1 instanceof Foo: falsefoo2 instanceof Foo: falsec1.isAssignableFrom(c1): truec2.isAssignableFrom(c2): truec1.isAssignableFrom(c2): falsec2.isAssignableFrom(c1): falsec1.isAssignableFrom(Foo.class): falsec2.isAssignableFrom(Foo.class): falseFoo.class.isAssignableFrom(c1): falseFoo.class.isAssignableFrom(c2): false

所以一切似乎都是一致的:-)



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/454292.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号