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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© qw无语 中级黑马   /  2013-11-21 00:14  /  1105 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. public class Test2 {
  2. public static void main(String[] args) {
  3. Rabbit rabbitw = new Rabbit("小白兔");
  4. Rabbit rabbitg = new Rabbit("小灰兔");
  5. rabbitw.start();
  6. rabbitg.start();
  7. }
  8. }

  9. class Rabbit extends Thread {
  10. private static int i = 100;

  11. Rabbit(String s) {
  12. setName(s);// 线程名字
  13. }

  14. public void run() {
  15. while (i > 0) {
  16. synchronized (this) {
  17. System.out.println(this.getName() + "吃了1个,还有胡萝卜" + --i);
  18. }
  19. }
  20. }
  21. }
复制代码
synchronized (this) 这里的this.是指Rabbit这个类,还是new出来的Thread对象.
如果是Rabbit这个类,为什么可以调用getName().
如果不是,那2个多线程岂不是不同步?那怎么解决啊?

评分

参与人数 1技术分 +1 收起 理由
To + 1

查看全部评分

1 个回复

倒序浏览
Java关键字this只能用于方法方法体内,在方法中,需要引用该方法所属类的当前对象时候,直接用this。
也就是说this可以代表当前类的对象,并不是new出来的对象,只是作为了对象的引用。
this是指向对象自己。当在一个类中要明确指出使用对象自己的的变量或函数时就应该加上this引用
所以说这里是Rabbit这个类的对象在调用getName()。
因为this只指向一个类,所以它是唯一的,线程使用的就是同一把锁,也是同步的

评分

参与人数 1技术分 +1 收起 理由
To + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马