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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 戎石锁 于 2012-8-9 11:57 编辑

class Bank
{
        private int sum;
        Object obj = new Object();
        public void add(int n)
        {
                synchronized(obj)
                {
                        sum=sum+n;
                        //try{Thread.sleep(10);}catch(Exception e){}
                        //这里为什么要添加异常,直接锁一次不就行了吗
                        System.out.println("sum="+sum);
                }
        }
}

5 个回复

倒序浏览
本帖最后由 张雪磊 于 2012-8-9 11:35 编辑

class Bank
{
        private int sum;
        Object obj = new Object();
        public void add(int n)
        {
                synchronized(obj)
                {
                        sum=sum+n;
                        //try{Thread.sleep(10);}catch(Exception e){}
                        //这里为什么要添加异常,直接锁一次不就行了吗
                        System.out.println("sum="+sum);
                }
        }
}

因为sleep方法在定义是跑出了已成
public static void sleep(long millis)                  throws InterruptedException
当函数体上申明了异常,当你调用时,你要么throws抛出去,要么用try{}catch(){}语句处理,否者就会编译失败,
RuntimeException除外。也就说,函数内如果抛出的RuntimeExcpetion异常,函数上可以不用声明。调用这个函数时可以不用处理
回复 使用道具 举报
张雪磊 发表于 2012-8-9 11:32
class Bank
{
        private int sum;


也不懂
回复 使用道具 举报
张雪磊 发表于 2012-8-9 11:32
class Bank
{
        private int sum;

这段函数不申明抛出异常,只加一个“锁”,锁不就是:只要里面有一个线程在操作,另一个线程就就能不去吗?当这个线程结束完后,另一个线程才能进入。既然这样为什么还要抛出异常呢
回复 使用道具 举报
加锁跟异常没有什么必然联系,加锁是为了保证多线程运行时的同步。对于异常,如果调用的某个方法,它声明了异常,那么在调用的时候就要try{}catch{}或继续throws,当然如果方法声明的是RuntimeException,那就不用了
回复 使用道具 举报
王少岩 发表于 2012-8-9 11:48
加锁跟异常没有什么必然联系,加锁是为了保证多线程运行时的同步。对于异常,如果调用的某个方法,它声明了 ...

嗯 了解了 谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马