黑马程序员技术交流社区

标题: 小程序关于同步,sleep,cup执行权 [打印本页]

作者: 汤密奕    时间: 2012-7-9 14:15
标题: 小程序关于同步,sleep,cup执行权
本帖最后由 汤密奕 于 2012-7-9 14:51 编辑

class SynTest implements Runnable{

        int i = 10;
        public synchronized void method1()
        {        
                i = 11;
                System.out.println("method1:"+i);
        }
        
        public synchronized void method2()
        {  

                try {                        Thread.sleep(2500);
                } catch (InterruptedException e) {

                        e.printStackTrace();
                }
                i = 12;        
        }
        
        public void run()
        {
                method1();
        }
        public static void main(String[] args) {
                SynTest s = new SynTest();
                Thread t = new Thread(s);
            t.start();
            s.method2();
            System.out.println("main:"+s.i);
        }
        
}
1、对此代码不改,结果是?

2、去掉method2()方法的同步 ,结果是?

3、在method2()方法去掉Thread.sleep(25000)的睡眠,结果是?麻烦分别陈述三种运行结果的原因




作者: 赵倩倩    时间: 2012-7-9 14:20
这让我怎么回答 是在让我帮忙运行吗  
1、---------- java ----------
method1:11
main:11
2、---------- java ----------
method1:11
main:12
3、---------- java ----------
main:12
method1:11

作者: 赵倩倩    时间: 2012-7-9 14:33
之所以有这样的结果是因为要理解sleep()方法的意义  sleep是对自身线程的控制 使自身线程停止2500s  其实结果跟你的沉睡时间是有关系的 在时间内 谁执行的快 i  的值也是变化的  多看看多线程的题 自己改改
作者: 尹善波    时间: 2012-7-9 18:03
赵倩倩 发表于 2012-7-9 14:20
这让我怎么回答 是在让我帮忙运行吗  
1、---------- java ----------
method1:11

为什么我的运行结果和你的不太一样?
//1、对此代码不改,结果是?
      main:12
     method1:11
     在多线程中主线程有
//2、去掉method2()方法的同步 ,结果是?
      method1:11
      main:12
//3、在method2()方法去掉Thread.sleep(25000)的睡眠,结果是?麻烦分别陈述三种运行结果的原因
      main:12
      method1:11
作者: 汤密奕    时间: 2012-7-10 11:20
菠菜(yinshi) 发表于 2012-7-9 18:03
为什么我的运行结果和你的不太一样?
//1、对此代码不改,结果是?
      main:12

结果不一样貌似和线程抢cup执行权有关




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