黑马程序员技术交流社区
标题:
线程中锁的应用的一个小程序问题。
[打印本页]
作者:
逝去的记忆ヽ
时间:
2012-6-13 15:35
标题:
线程中锁的应用的一个小程序问题。
public class TT extends Thread {
int b = 100;
public synchronized void m1()throws Exception{
b=1000;
Thread.sleep(3000);
System.out.println("m1:"+"b="+b);
}
public void m2(){
System.out.println("m2"+b);
}
public void run(){
try {
m1();
} catch (Exception e) {
// TODO: handle exception
}
}
public static void main(String[] args) throws Exception {
TT tt = new TT();
Thread t = new Thread(tt);
t.start();
Thread.sleep(100);
tt.m2();
}
}
答案是 先输出m2的1000 在输出m1的1000,这里我就不懂了,int b = 100;前面没有加static,为什么被改变了?我以为m2应该输出还是100的,公共变量,只要下面哪个方法里改了,这个变量本身值就真的改了吗?不需要加static的?
作者:
宋浩
时间:
2012-6-13 15:58
本帖最后由 宋浩 于 2012-6-13 16:01 编辑
package Test;
import org.omg.CORBA.PRIVATE_MEMBER;
public class TestStatic {
public static void main(String args[]){
Test t1=new Test();
Test t2=new Test();
t1.print();
t1.changem1();
t1.changem2();
t1.print();
t2.print();
}
}
class Test{
int m1=100;
static int m2=100;
public void changem1(){
m1=1000;
System.out.println("改变非静态变量m1的值");
}
public void changem2(){
m2=1000;
System.out.println("改变静态变量m2的值");
}
public void print(){
System.out.println("非静态变量m1的值:"+m1);
System.out.println("静态变量m2的值:"+m2);
}
}
复制代码
楼主,可以看哈上面的程序代码哈,其实你的代码就是一个静态成员变量和非静态成员变量的问题。。因为静态成员是属于类的,所以一个对象改变后,另一个对象也会发生改变,非静态成员变量是属于对象的,所以在同一个对象中改变他的值才会发生改变,你好像就创建了一个对象吧。。上面程序运行结果如下图:
QQ截图20120613155804.png
(5.65 KB, 下载次数: 17)
下载附件
2012-6-13 15:58 上传
未命名.jpg
(1.39 MB, 下载次数: 28)
下载附件
2012-6-13 15:58 上传
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2