学到了线程同步的地方,这个程序的运行过程不是很明白,方法M2前面的关键字synchronized去掉了,程序又是怎么运行的?程序如下,非常感谢!
public class TT implements Runnable {
int b = 100;
public synchronized void m1() throws Exception{
//Thread.sleep(2000);
b = 1000;
Thread.sleep(5000);
System.out.println("b = " + b);
}
public synchronized void m2() throws Exception {
Thread.sleep(2500);
b = 2000;
}
public void run() {
try {
m1();
} catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception {
TT tt = new TT();
Thread t = new Thread(tt);
t.start();
tt.m2();
System.out.println(tt.b);
}
}
public class TT implements Runnable {
int b = 100;
public synchronized void m1() throws Exception{
//Thread.sleep(2000);
b = 1000;
Thread.sleep(5000);
System.out.println("b = " + b);
}
public synchronized void m2() throws Exception {
Thread.sleep(2500);
b = 2000;
}
public void run() {
try {
m1();
} catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception {
TT tt = new TT();
Thread t = new Thread(tt);
t.start();
tt.m2();
System.out.println(tt.b);
}
}
解决方案 »
- 从键盘中输入10个整数,对其中的正整数进行累加,最后输出结果. 用java编写啊。新手在练习啊。求帮忙!
- GUI的相关问题
- japplet jdbc问题
- 计算1000!后有几个零?
- 有没有有关 Java 套打的资料或代码???谢谢~~~~~~~~~~~
- 谁写过IBM的简历。。近来看看。问题解决马上结帖
- 我用java做了一个画图软件,调用Graphics的rotate后,系统的坐标整个的乱掉了。请问有没有好的处理方法啊?
- char变为String
- 求教,如何让jcombobox的选中项在EditorComponent显示不同的值
- 请问java是强在哪里啊?
- java线程测试, JDK1.6的发现 (求探讨)
- 关于jsp页面通过js提交的问题
但是不一定马上就run了
M1方法锁定,并不等于b这个变量被锁定,这个变量还是可以被改变的。一个对象上所有带synchronized的方法可以被看成一组,同时只能有一个线程进入其中一个方法,
而其它没有synchronized的方法可以随便进入。如果想控制对一个变量的同步,可以单独对一个变量加锁(前提是这个变量要是一个对象,原子类型不可以):
synchronized(b){
}