您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

除非打印出来,否则值不会在while循环中更新

除非打印出来,否则值不会在while循环中更新

如果在工作代码和非工作代码之间唯一改变的是println语句,那么几乎可以肯定会有线程问题。该System.out.println()语句增加一个小暂停,这可能会偶然导致它的行为,但不能解决问题。您可以执行以下操作:

try {
    Thread.sleep(10);
} catch (InterruptedException ex) {
}

…代替它并检查相同的行为,如果确实相同,那么这几乎可以确认线程问题。但是,正如下面所指出的,它println()还会做其他一些事情,例如引起内存障碍,因此这不是万无一失的测试。另一个也许更好的检查方法是暂时替换ArrayListVector,这是线程安全的- 尽管这是一个旧式集合,所以不建议在最终代码中使用。

如果是这种情况,听起来您没有ArrayList正确同步调用-ArrayList不是线程安全集合。每当您读取或写入列表时,都应在同步块内进行操作,如下所示,在列表上进行同步:

synchronized(list) {
    list.whatever();
}

…这将确保只有一个线程可以ArrayList一次访问该线程,从而有望解决线程问题。

其他 2022/1/1 18:27:32 有566人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶