黑马程序员技术交流社区

标题: 线程之同步 [打印本页]

作者: outsider1020    时间: 2014-12-23 10:55
标题: 线程之同步
public class TT implements Runnable {
         int b =100;
         public synchronized void m1() throws Exception
                b=1000 ;
                Thread .sleep( 5000);
                System .out. println("b=" +b);
         }
         public 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 ) {
                TT tt=new TT ();
                Thread t=new Thread (tt);
                t .start() ;
               
                try {
                        Thread .sleep( 1000);
                } catch (InterruptedException e) {
                        e .printStackTrace() ;
                }
                try {
                        tt .m2();
                } catch (Exception e) {
                        e .printStackTrace() ;
                }
         }
}
执行结果为:
b=2000



作者: 些许    时间: 2014-12-23 10:55
程序从main函数进去, |——开辟了一个t线程  ,t执行中b=1000再停留了5000毫秒
                                  |——main线程继续向下执行停留了1000毫秒在调用了tt .m2()在停留2500毫秒后b=2000毫秒
所以当t线程停留在3500毫秒时 ,mian线程走完了了并改动了b=2000,所以t线程在停留1500毫秒 打印出来的是改动后的b

作者: alston    时间: 2014-12-24 07:52
进来学习了
作者: 小徐_y8nUx    时间: 2014-12-24 08:38
最好写的程序能有格式,不然看起来费劲
作者: 中国梦    时间: 2014-12-24 08:59
进来学习学习
作者: outsider1020    时间: 2014-12-26 09:46
小徐_y8nUx 发表于 2014-12-24 08:38
最好写的程序能有格式,不然看起来费劲

受教。。。
作者: outsider1020    时间: 2014-12-26 10:00
些许 发表于 2014-12-23 18:43
程序从main函数进去, |——开辟了一个t线程  ,t执行中b=1000再停留了5000毫秒
                          ...

感谢。。。。。。。。。。。
作者: Mr.JUN    时间: 2015-1-6 11:38
为什么不是1000,怎样修改才可以变为1000,LZ有了答案,发来看看哦
作者: jant60    时间: 2015-1-7 15:10
因为没有循环,他只执行一次,当执行m1()给b赋值后,他就睡着了
在还没醒过来时候(大概2500ms后)m2被主线程执行了,给b赋值2000,然后m1醒了,就输出了2000
在这里不回出现锁的情况因为他们用的不是一个锁
作者: 自信流云    时间: 2015-1-9 21:05
新人来学习
作者: shaoboguanzi    时间: 2015-1-23 17:48
线程同步是解决线程相互竞争一个资源发生的竞争。
作者: cuixinfu    时间: 2015-1-27 10:56
路过看看 学习学习!
作者: yanqiuqiu    时间: 2015-1-28 09:06
多学习。。
作者: 付家辉    时间: 2015-3-13 18:00
先执行m1,再执行m2,对b的值进行了覆盖。假如你先执行m2,再执行m1,结果为就为1000




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2