黑马程序员技术交流社区

标题: 多线程异常问题(谢谢各位,问题已解决) [打印本页]

作者: 戎石锁    时间: 2012-8-9 11:18
标题: 多线程异常问题(谢谢各位,问题已解决)
本帖最后由 戎石锁 于 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);
                }
        }
}

作者: 张雪磊    时间: 2012-8-9 11:32
本帖最后由 张雪磊 于 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:43
张雪磊 发表于 2012-8-9 11:32
class Bank
{
        private int sum;


也不懂
作者: 戎石锁    时间: 2012-8-9 11:44
张雪磊 发表于 2012-8-9 11:32
class Bank
{
        private int sum;

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

嗯 了解了 谢谢




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