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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄奕豪 中级黑马   /  2012-5-19 16:58  /  1815 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黄奕豪 于 2012-5-19 17:14 编辑

看到多线程,看到synchronized(锁对象),看着看着就迷糊了,定义一个锁对象,任意的都行,上帝Object也行,person也行,甚至类名.class文件对象都可以,那这些有区别吗?定义了这样一个锁对象又到底有什么用啊!!搞不清,理不明啊~~~这个到底有什么特别用处~
楼下的兄弟说了,锁是用来锁共享资源的,那有synchronized关键字不就行了嘛,干嘛还要传个什么都可以的对象呢?这个对象用来干嘛啊?难道就是为了区分synchronized的么?那这样没必要要个对象吧!多耗内存啊!!!!搞个标号就行了啊!

点评

才能进来,比如现实中,不是任何人都能开你家的门吧,必须是你家锁的钥匙才能开你家的门。这个锁对象就相当于判断哪个线程可以进来的  发表于 2012-5-19 21:05
你可以这样理解,synchronized 是门 ()里面的对象是 门上面的一个锁 不是任何对象的线程都能跑进来的,必须是跟()里的对象有关联的 线程才能...  发表于 2012-5-19 20:59

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

4 个回复

倒序浏览
锁是一种安全机制;通常用于多线程中;
多线程一般用于并发的应用,如果强调这个系统的多任务性,那么就应该用到多线程了。
比如:你要实现一个银行系统或是实现一个C\S架构这样的系统,你就应该考虑用多线程了,
锁的出现是为了确保数据读写完成后的正确性;涉及到敏感的资源访问时就应该用到锁的机制;
多线程很容易访问共享的资源,所以需要锁定,防止某线程正在用的被其他线程调用,
所以需要先锁定该区域,用完了再释放。这就是锁的概念。

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
李文富 发表于 2012-5-19 17:04
锁是一种安全机制;通常用于多线程中;
多线程一般用于并发的应用,如果强调这个系统的多任务性,那么就应 ...

你说它是用来锁共享资源的,那不是synchronized关键字做的事么,那传个锁对象给它干嘛啊?
回复 使用道具 举报
本帖最后由 李文富 于 2012-5-19 17:35 编辑
黄奕豪 发表于 2012-5-19 17:11
你说它是用来锁共享资源的,那不是synchronized关键字做的事么,那传个锁对象给它干嘛啊? ...


那你试想任意代码块下涉及到资源的操作,一个线程在运行的过程中可能在任意一个语句停下,另一线程抢占cpu去执行读写操作,这是不安全的。这过程中还可能出现死锁,所以设计的时候应该将锁优先级设计的上帝Object也行,person也行,甚至类名.class文件对象要高。
补充一点:锁的出现的确会大大降低程序效率,的确应该做到正确的使用锁,对那个操作要明确必须上锁,在并发前提下保证数据的正确性。如果随意上锁还不如使用单线程来做。锁在多线程下是必须要的。如果想深入理解 查看下   汤子瀛《操作系统原理》那里有锁机制的详细解述
回复 使用道具 举报
在java虚拟机中,每个对象和类在逻辑上都是和一个监视器相关联的。
当对一个对象加了锁,就需要一个锁指向这个对象,锁有计数器,对这个对象进行监控。
锁住一个对象就是获取对象相关联的监视器。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马