线程的问题 本帖最后由 zd1217 于 2009-07-04 20:56:01 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以的,m2方法没有要求任何线程锁(monitor) 执行结果是调用m2方法的TT对象的b值 估计我可能是没理解线程同步执行结果是:1000b=1000第一个1000应该是主线程调用m2方法的结果,那个时候m1方法不被锁了吗?主线程肯定不能执行m1方法,为什么不是初始的100? 首先,如果一个类中有多个方法加锁了,那么一旦访问其中的一个方法,其他的不能够在被访问,但是没有加锁的方法依旧可以被访问;你的结果是:1000 b=1000 可以肯定的是,你的一个线程调用了方法m1,并执行了b=1000;这一句,之后他进入了睡眠,此时间种他的时间片轮换结束了,轮到另外一个线程执行并调用了方法m2,此时b的值已经修改了;所以结果是....一般情况下,如果你的b是临界变量,那么你应该同时加锁m2方法; 能执行,打印的b的值可能是100,也可能是1000.m1方法虽然是同步的,但是m2方法却不是。m1方法声明为同步的,并且是一个非静态方法(也叫对象级方法),所以,这个方法的执行是对这个对象本身加锁的。而m2方法非同步,所以进入时不需要对这个对象加锁,所以不会被锁住。m2方法的调用线程读取的是变量值本身的一份拷贝,这个要看这个拷贝是什么时候从变量值本身拷贝而来。换句话说,就是看读取b的时候,b的值有没有被m1写为1000. 看不懂啊看不懂.....你把main程序写出来....有点像马士兵讲的例子 类中的方法加锁,对其他不加锁方法是没有约束力的.方法m2()没有加锁,m1()加锁对它没有影响.因此,方法m2()随时可以执行,b结果可能为1000,也可能为100,取决于m1()执行的情况 写出main()容易就某个问题讨论。 i + (i++))与(i++) + i 欢迎java高手进组 怎么才能用到已经存在的对象呢。而且角度问题,比如这个对象是当前对象的父类对象?同包?一点关系没有? 数字排序问题, 新手 急救 :用cmd 编译class 文件的时候 出错就出现乱码信息 为什么运行后没反应啊? JDOM读取汉字为乱码? java调用存储过程的问题,高手请进!! 使用过JTable的高手请帮忙,给高分! 如何设置环境变量? 过滤字符串问题 如何 把字符串Fri Jul 03 10:48:32 CST 2009转换日期形式的字符串?
1000
b=1000第一个1000应该是主线程调用m2方法的结果,那个时候m1方法不被锁了吗?主线程肯定不能执行m1方法,为什么不是初始的100?
你的结果是:
1000
b=1000
可以肯定的是,你的一个线程调用了方法m1,并执行了b=1000;这一句,之后他进入了睡眠,此时间种他的时间片轮换结束了,轮到另外一个线程执行并调用了方法m2,此时b的值已经修改了;所以结果是....
一般情况下,如果你的b是临界变量,那么你应该同时加锁m2方法;
方法m2()没有加锁,m1()加锁对它没有影响.因此,方法m2()随时可以执行,b结果可能为1000,也可能为100,取决于m1()执行的情况