package com.syn;public class TT implements Runnable { int b = 100; public static void main(String[] args) throws Exception {
TT t = new TT();
Thread t1 = new Thread(t);
t1.start();
t.m2();
Thread.sleep(6000);
System.out.println("m2" +" :" +t.b);
} @Override
public void run() {
try {
m1();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } public synchronized void m1() throws Exception {
b = 1000;
Thread.sleep(5000);
System.out.println("m1" +" :" +b); } public synchronized void m2() throws InterruptedException {
Thread.sleep(1000);
b = 2000;
System.out.println("m2" +" :" +b);
}
}为什么 最后输出的是1000??,在线程2的时候应该已经改了的呀?
TT t = new TT();
Thread t1 = new Thread(t);
t1.start();
t.m2();
Thread.sleep(6000);
System.out.println("m2" +" :" +t.b);
} @Override
public void run() {
try {
m1();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } public synchronized void m1() throws Exception {
b = 1000;
Thread.sleep(5000);
System.out.println("m1" +" :" +b); } public synchronized void m2() throws InterruptedException {
Thread.sleep(1000);
b = 2000;
System.out.println("m2" +" :" +b);
}
}为什么 最后输出的是1000??,在线程2的时候应该已经改了的呀?
解决方案 »
- Eclipse每次打开都是用默认的C盘的workspace,而且无法修改,怎么回事?
- 长整型想加减的算法
- 关于++符号的问题!前辈帮忙!
- 本人即将毕业,面临就业压力,欲高薪请J2EE家教一名
- 请大家帮我看看,分析一下这两个题
- 求助:JSplitPane中使用两个JScrollPane,如何拖动一个JScrollPane的滚动条,产生两个JScrollPane一起连动的效果。
- final Main test = new Main();
- 关于JOptionPane中的消息框?
- 非常简单的来鸟问题(50分)
- javac 命令可以用,但是java命令报错
- 网页中applet当调用第三方jar包时,applet不显示.急!!!!
- 字符串截取替换问题
t1.start();
t1.join();
t.m2();
http://topic.csdn.net/u/20120922/15/de48b338-83b1-4203-bf3f-d7b93add5b35.html
我想问,是不是m2的线程已经把b这个变量锁住了呀,所以m1只能等m2走完,才能拿到b阿,如果 是这样的话就可以说得通了,那么m2走在前面的话就是2000,然后m1是1000, 最后输出就是1000
http://topic.csdn.net/u/20120618/19/62eef5ad-648d-4a2e-bf33-28ca3978a793.html?r=78896940
加上t1.join();
等待子线程执行完毕后执行主线程赋值。
执行顺序和sleep没有关系。