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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孔雀东南飞 中级黑马   /  2013-6-8 14:06  /  1573 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 孔雀东南飞 于 2013-6-10 10:37 编辑

this问题让我很迷惑,怎么都理解不了。
如下:定义了同步函数,public  synchronized void show(),但是在run()中调用,为什么要加this呢?
老师解答是:函数需要被对象调用,那么函数都有一个所属对象引用,就是this。所以同步函数使用的锁是this。
但是:函数之间不是也可以调用吗,既然this.  可以 省略,那写不写又有什么关系?
而且:如下代码一与代码二都调用了show,为什么代码一加this,而代码二就不需要加呢?
class Ticket implements Runnable
{
    private  int tick = 100;
    boolean flag = true;
    public void run()

    {
            /*代码一:
            while(true)

            {
               this. show();                                //必须加this,why?
             }
             */
            //代码二:
               if(flag)
            {
            while(true)
            {
                synchronized(this)

                {
                    if(tick>0)

                    {
                        try

                        {
                            Thread.sleep(10);

                        }

                        catch(Exception e)

                        {
                        }
                        System.out.println(Thread.currentThread().getName+tick--);

                    }

                    else

                    {
                        while(true)

                        {
                            show();                          //这里没有加this,为什么又可以?

                        }

                    }
                }

            }

    }

    public  synchronized void show()

    {
        if(tick>0)

        {
            try
            {                Thread.sleep(10);
            }
            catch(Exception e)
            {
            }

            System.out.println(Thread.currentThread().getName+tick--);
        }

    }

}
class StaticMethDemo
{
    public static void main(String[] args)

    {
        Ticket t = new Ticket();

        Thread t1 = new Thread(t);

        Thread t2  = new Thread(t);

        t1.start();

        t2.start();

    }

}

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 神马都是浮云

查看全部评分

3 个回复

倒序浏览
好像并没有说一定要加this吧。  我试了很多次。
代码一不加this并没有问题- -
回复 使用道具 举报
谁用锁的时候this代表谁!
回复 使用道具 举报
了解了,又多试了几次,加不加,结果一样。多谢各位!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马