java – Runnable.toString()什么时候可以返回重复的String?
发布时间:2020-12-15 05:12:01 所属栏目:Java 来源:网络整理
导读:this.toString()什么时候可能返回重复的String? public static void main(java.lang.String s[]) { for(int i=0;i155000;i++) { new Thread(new Runnable() { public void run() { System.out.println(this.toString()); } }).start(); }} 解决方法 托马斯
this.toString()什么时候可能返回重复的String?
public static void main(java.lang.String s[]) { for(int i=0;i<155000;i++) { new Thread(new Runnable() { public void run() { System.out.println(this.toString()); } }).start(); } } 解决方法
托马斯的回答是正确的,因为将调用Object的默认toString()方法,该方法为不同的对象生成不同的字符串.
有一点需要注意. Object.toString()返回: return getClass().getName() + "@" + Integer.toHexString(hashCode()); 它包括Object.hashCode(). hashCode()的Javadoc指出:
关键是hashCode()对于不同的对象将是不同的.由于您的代码不存储创建的Runnables,因此一旦线程完成,它们将被垃圾收集.一旦从内存中删除了一个对象,另一个Object就可以在内存中占据一席之地,新的Runnable可能会提供前一个Runnable返回的相同哈希码,该哈希码现在已不复存在. 所以理论上你可能会看到不确定地打印相同的字符串(尽管机会很小). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |