多线程中每个类都有一个锁吗? 本帖最后由 ameyume 于 2010-09-01 21:07:06 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 恭喜你答错了,对于同一个类的多个对象,每个对象都有一把锁。锁可以是object级别的,也可以是class级别的。 在 Java 的世界里,每个对象实例本身都是一把锁,包括一个 Class 对象(就是1楼说的class级别)。■□■□■□■□■□■□■□■□ □■ 忍以明志 勤以致远 ■□ □■□■□■□■□■□■□■□■基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,分享给大家,欢迎技术交流 :) 是谁跟你说的 sleep 可以实现同步? 百度了一下,看到有人这么回答,看来真是尽信书不如无书啊,何况是baidu呢线程同步有几种方法??http://zhidao.baidu.com/question/15390715.html?fr=ala0 也就是说sleelp只起到睡眠等待的作用,并不能使线程同步? 是控制线程的几种方法 不是同步设置优先级sleepyieldjoin同步用synchronized 同步主要是为了解决多线程访问的情况下,出现读到脏数据的情况除了synchronized,wait,notify能达到此功能之外还有volatile关键字在Java1.2之后,又有ThreadLocal用于隔离不同线程,属于不同类型的同步吧。现在Java7之后,又有fork in机制。 多个线程竞争的其实是锁。你可以用某个对象的隐式锁(称L)把某段代码“锁住”。一个线程首先进入这段代码后,这个线程就独占这个锁L,其他线程只有等这个线程执行完这段被锁代码,释放锁L后才能再去竞争锁L,从而进入这段代码。至于notify是跟对象的隐式条件有关,你可以去看一下《java核心技术》的线程那一章,它将的蛮清楚的。在java5里好像还出现了单独的锁对象和条件对象。顺便提一下,我看的是java5的黄底红字第7版。 我认为楼主走入锁的泥塘了。不要去考虑是不是每个对象有把锁,类是不是有把锁等定。这样想,1.任何对象都可以做锁。2.对于有用synchronized的地方,分析清楚他用的是什么作为锁。 如静态方法 前加 synchronized, 锁是什么? 是该类对应的class对象。 非静态方法呢? 是当前对象。 synchronized 代码块呢? 是你指定的那个对象。把这两点搞清楚了,这个锁的问题就豁然开朗了。 对于同一个类的多个对象,每个对象都有一把锁。锁可以是object级别的,也可以是class级别的。 不要说锁是什么级别的,你的意思准确说是这样:锁可以是object级别的 ---》非静态方法呢? 是当前对象。class级别的---》 如静态方法 前加 synchronized, 锁是什么? 是该类对应的class对象。锁无级别,就是看你用谁做锁。 哥们,sleep应该是不能实现同步吧,比如说sleep(1000),这并不是一秒,要根据倒是系统线程与进程的运行状况来判定,有可能小于一秒,也可能大于一秒!!! 简单小程序奇怪现象,大家来看看 断开据库联接?? 在JAVA中如何用数组实现把日期转换为星期几 **请高手指教:java applet中如何实现一个对话框?** 敬请高手指点,网络问题 如何在屏幕指定的位置输出结果?(新手,多多关照) 关于一个图形输出的问题??救我 Java里实现des算法的类是那一个? Liunx+Apache+Tomcat的安全漏洞!!! 高分征集解决方法 String 不能付给 Datetime类型? .jsp的登陆界面中用session保存信息的问题 Console是干什么用的?为什么我的小代码出错了。。
□ □
■ 忍以明志 勤以致远 ■
□ □
■□■□■□■□■□■□■□■
基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,分享给大家,欢迎技术交流 :)
看到有人这么回答,看来真是尽信书不如无书啊,何况是baidu呢线程同步有几种方法??
http://zhidao.baidu.com/question/15390715.html?fr=ala0
sleep
yield
join同步用synchronized
还有volatile关键字在Java1.2之后,又有ThreadLocal用于隔离不同线程,属于不同类型的同步吧。现在Java7之后,又有fork in机制。
多个线程竞争的其实是锁。你可以用某个对象的隐式锁(称L)把某段代码“锁住”。一个线程首先进入这段代码后,这个线程就独占这个锁L,其他线程只有等这个线程执行完这段被锁代码,释放锁L后才能再去竞争锁L,从而进入这段代码。至于notify是跟对象的隐式条件有关,你可以去看一下《java核心技术》的线程那一章,它将的蛮清楚的。在java5里好像还出现了单独的锁对象和条件对象。顺便提一下,我看的是java5的黄底红字第7版。
1.任何对象都可以做锁。
2.对于有用synchronized的地方,分析清楚他用的是什么作为锁。
如静态方法 前加 synchronized, 锁是什么? 是该类对应的class对象。
非静态方法呢? 是当前对象。
synchronized 代码块呢? 是你指定的那个对象。
把这两点搞清楚了,这个锁的问题就豁然开朗了。
不要说锁是什么级别的,你的意思准确说是这样:
锁可以是object级别的 ---》非静态方法呢? 是当前对象。
class级别的---》 如静态方法 前加 synchronized, 锁是什么? 是该类对应的class对象。
锁无级别,就是看你用谁做锁。