内存小问题不理解,新手

captainAmerica5 2017-08-30 10:45:10
public class Demo03 {
static int a=3;
public static void main(String[] args) throws InterruptedException {
while(true){
Thread.sleep(1000);
while(a!=3){
System.out.println("已改变");
}

}
}
}
--------------------------------------------------------------------------------------
public class Demo04 {
public static void main(String[] args) {
Demo03.a=4;
System.out.println(Demo03.a);

}
}
第一步:Demo03先启动 目标就是等待static的a值被改变
第二步:启动Demo04,改变Demo03.a值
预想:静态a值被改变,执行System.out.println("已改变");
搞不懂内存。大神出手吧。
...全文
493 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
huangxingzhou 2017-09-04
  • 打赏
  • 举报
回复
程序能运行通过吗?如果运行没问题,是你的理解有问题? 如果不能运行,就不是内存问题,而是线程或进程使用内存资源的问题。
zerozerg2006 2017-09-01
  • 打赏
  • 举报
回复
你这是两个不相干的程序啊,又不是一个程序里的多线程。差不多就是,程序1里有个Demo3,并且调用了这个的main函数。 程序2里有Demo3,和Demo4,然后调用了Demo4的main函数,修改了Demo3的a。
soton_dolphin 2017-08-31
  • 打赏
  • 举报
回复
还有一个问题就是你这两个main 方法也不可能同时运行啊
hong_369 2017-08-31
  • 打赏
  • 举报
回复
我觉得应该是当你第二步执行demo04时,jvm默认将demo03的主方法弹栈了,从而加载自己的类,执行自己的主方法,此时demo03的主方法根本不会执行,而它的类没有释放,所以其静态变量可以在其他类中调用改变
soton_dolphin 2017-08-31
  • 打赏
  • 举报
回复
引用 3 楼 captainAmerica5 的回复:
引用 1楼soton_dolphin 的回复:
这是完全不一样的两个程序,完全没有关系,相隔十万八千里,各自有各自的内存空间
不了解,能画个内存图吗?


captainAmerica5 2017-08-31
  • 打赏
  • 举报
回复
引用 5楼hong_369 的回复:
两个主方法没报错?一个程序一次运行只能有一个主线程(main方法),不然jvm怎么识别
可以的,不信你试试
hong_369 2017-08-31
  • 打赏
  • 举报
回复
两个主方法没报错?一个程序一次运行只能有一个主线程(main方法),不然jvm怎么识别
captainAmerica5 2017-08-31
  • 打赏
  • 举报
回复
引用 13楼自由自在_Yu 的回复:
Demo03.a=4;这个赋值对Demo3没有影响的,你的Demo3里面a的值不会改变的
兄弟,谢谢你,答案http://blog.csdn.net/chenkai619/article/details/7506642
captainAmerica5 2017-08-31
  • 打赏
  • 举报
回复
引用 16楼sjjk 的回复:
可以看下这篇博文:
http://blog.csdn.net/chenkai619/article/details/7506642
兄弟,情况和我的一样,谢谢,解决了我的疑惑
sjjk 2017-08-31
  • 打赏
  • 举报
回复
可以看下这篇博文:
http://blog.csdn.net/chenkai619/article/details/7506642
captainAmerica5 2017-08-31
  • 打赏
  • 举报
回复
引用 13楼自由自在_Yu 的回复:
Demo03.a=4;这个赋值对Demo3没有影响的,你的Demo3里面a的值不会改变的
大神剖析下,为什么赋值没有改变。怎么搞的,谢谢啊
captainAmerica5 2017-08-31
  • 打赏
  • 举报
回复
引用 13楼自由自在_Yu 的回复:
Demo03.a=4;这个赋值对Demo3没有影响的,你的Demo3里面a的值不会改变的
是的,这里不是改变,好像是在demo04里面单独创建了一个demo03里面的变量 ,给这里面值赋值。都是自己理解,不知对不对
自由自在_Yu 2017-08-31
  • 打赏
  • 举报
回复
Demo03.a=4;这个赋值对Demo3没有影响的,你的Demo3里面a的值不会改变的
自由自在_Yu 2017-08-31
  • 打赏
  • 举报
回复
引用 9 楼 soton_dolphin 的回复:
还有一个问题就是你这两个main 方法也不可能同时运行啊
第一个main是一个循环,持续运行的,然后再启动第二个
自由自在_Yu 2017-08-31
  • 打赏
  • 举报
回复
引用 6 楼 captainAmerica5 的回复:
引用 5楼hong_369 的回复:
两个主方法没报错?一个程序一次运行只能有一个主线程(main方法),不然jvm怎么识别
可以的,不信你试试
这是两个单独的class,之间没什么关系,每个类有自己的main,当然不会报错了
李德胜1995 2017-08-31
  • 打赏
  • 举报
回复
引用 4 楼 captainAmerica5 的回复:
引用 2楼Danishlyy1995 的回复:
对啊 你这是两个类啊 其实你可以看看内存分布,比如对象存在哪个区域?常量存在哪个内存等
那一个类如何改变另一个类内存中的静态值,
Demo03写成一个线程,Demo04写成一个线程,对Demo05的静态成员进行操作,在Demo05中启动这两个线程就可以了。。。
captainAmerica5 2017-08-30
  • 打赏
  • 举报
回复
引用 2楼Danishlyy1995 的回复:
对啊 你这是两个类啊 其实你可以看看内存分布,比如对象存在哪个区域?常量存在哪个内存等
那一个类如何改变另一个类内存中的静态值,
墨笙弘一 2017-08-30
  • 打赏
  • 举报
回复
对啊 你这是两个类啊 其实你可以看看内存分布,比如对象存在哪个区域?常量存在哪个内存等
captainAmerica5 2017-08-30
  • 打赏
  • 举报
回复
引用 1楼soton_dolphin 的回复:
这是完全不一样的两个程序,完全没有关系,相隔十万八千里,各自有各自的内存空间
不了解,能画个内存图吗?
soton_dolphin 2017-08-30
  • 打赏
  • 举报
回复
这是完全不一样的两个程序,完全没有关系,相隔十万八千里,各自有各自的内存空间

62,625

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧