A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 汤密奕 初级黑马   /  2012-7-9 14:15  /  1618 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 汤密奕 于 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)的睡眠,结果是?麻烦分别陈述三种运行结果的原因



4 个回复

倒序浏览
这让我怎么回答 是在让我帮忙运行吗  
1、---------- java ----------
method1:11
main:11
2、---------- java ----------
method1:11
main:12
3、---------- java ----------
main:12
method1:11
回复 使用道具 举报
之所以有这样的结果是因为要理解sleep()方法的意义  sleep是对自身线程的控制 使自身线程停止2500s  其实结果跟你的沉睡时间是有关系的 在时间内 谁执行的快 i  的值也是变化的  多看看多线程的题 自己改改
回复 使用道具 举报
赵倩倩 发表于 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
回复 使用道具 举报
菠菜(yinshi) 发表于 2012-7-9 18:03
为什么我的运行结果和你的不太一样?
//1、对此代码不改,结果是?
      main:12

结果不一样貌似和线程抢cup执行权有关
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马