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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

class sale implements Runnable
{
        private int t =100;
        Object o = new Object();
        public void run ()
        {
                synchronized(o)
                {
                while (t>0)
                {
                        try
                        {
                                Thread.sleep(10);
                        }
                        catch ( InterruptedException i)
                        {
                        }
                        System.out.println(Thread.currentThread().getName()+"....."+t--);
                }
        }}
}
class TicketDemo
{
        public static void main(String[]args)
        {
                sale s = new sale();
                Thread t1 = new Thread(s);
                Thread t2 = new Thread(s);
                Thread t3 = new Thread(s);
                Thread t4 = new Thread(s);
                t1.start();
                t2.start();
                t3.start();
                t4.start();
        }
}
-------------------------------------------
添加对象时为什么需要Object o = new Object();再synchronized(o)
而不能直接synchronized(new Object())?


3 个回复

倒序浏览
你好,你可能对这个同步方法的原理理解的不是很深刻,它里面的对象代表一个唯一对象,那么如果你用的是new object(),那么就相当于任何一个线程进来的时候都是多了对象,既然多了一个对象,那么如何保证程序的安全性呢?其实同步方法的作用用通俗的话来说,同一个时刻你只能进来一个对象,而不能进来多个,懂了吗?

点评

必须是一个明确的对象!才能和其他锁区分开!懂了懂了,谢谢!  发表于 2015-5-24 09:19
回复 使用道具 举报
使用本身对象this就可以了,代码块和和锁的方法都是this 静态方式类名的,class
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马