
主程序中变量值未更新的原因
在多线程场景下,不同线程拥有自己的内存空间,称为线程私有区域。当线程中对变量进行修改时,该修改仅反映在该线程的私有区域中,而不会影响主程序的内存空间。
在给定的示例中,主程序创建了一个名为 va 的值对象,并将其 a 属性设置为 2。然后,它启动了一个线程 td。在 td 线程中,创建一个新的 va 对象并将其 a 属性设置为 10。
由于 td 线程中的 va 对象与主程序中的 va 对象是不同的对象,因此在 td 线程中对 va 的修改不会影响主程序的 va 对象。因此,当主程序在退出 td 线程后访问 va 对象时,它仍然包含最初设置的值 2。
解决方法
豆包AI编程
豆包推出的AI编程助手
483 查看详情
为了在主程序中反映线程中对变量所做的修改,需要确保主程序和线程访问同一个变量对象。一种方法是将变量对象作为线程的构造函数参数传递。
修改后的代码如下:
package threadTest;public class Main { public static void main(String[] args) throws InterruptedException { System.out.println("=======1========"); Values va = new Values(); va.setA(2); System.out.println("mainThread1: " + va.getA()); System.out.println("=======2========"); ThreadDemo td = new ThreadDemo(va); td.start(); td.join(); System.out.println("=======3========="); System.out.println("mainThread2: " + va.getA()); }}class ThreadDemo extends Thread { private Values va; // 接收主程序的va对象 public ThreadDemo(Values va) { this.va = va; } @Override public void run() { va.setA(10); // 修改传入的va对象 }}class Values { private int a; public void setA(int a) { this.a = a; } public int getA() { return a; }}
通过将 va 对象作为参数传递给线程,确保主程序和线程都能访问同一个变量对象,从而实现对变量值的同步更新。
以上就是多线程场景下,为什么主程序中的变量值没有更新?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/630561.html
微信扫一扫
支付宝扫一扫