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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 逆世界ylm 中级黑马   /  2014-12-18 16:43  /  1001 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在我们实现Runnable接口来创建线程的时候,我们的同步代码块中使用This锁,这个This是指向我创建的线程对象,还是我实现的接口的类的对象??
然后就是我们可以通过继承Thread类类抽象线程这个概念,为什么还要有Runnable这个接口,这个接口它的用途到底在哪??
这两种方式创建线程,哪一种用的比较多,为什么??

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

2 个回复

倒序浏览
第一个问题,This锁代表的是你同步代码块所在类的实例化对象;第二个问题,没有特许要求一般都实现Runnable接口,这是由于java的单继承性,如果类继承了Thread,那么这个类就不能继承其他类了,失去了扩展性
回复 使用道具 举报
1.同步代码块的()里放的是对象,该对象的含义是:如果有多个同步代码块()内放的都是同一个对象,那么也就是说这几个同步代码块是一把锁。锁的机制就是 ,一个对象控制多个同步代码块。你可以在这里放this,this都是指的当前类的对象,是同一个对象。其实你也 可以这么写,类名.class     这是类的字节码对象,在内存中仅有一份
需要记住的是:同一个锁,同步代码块()内都是同一个对象,如果不是同一个对象就不是同一把锁了。
2.关于是使用new THread()  还是new Thread(new Runnable()),楼上说的很明白了。就是扩展性问题。使用接口的话扩展性要好一些。如果你的程序仅仅是开一个线程,没什么扩展性要求,那么使用new Thread也是一样的。
3.但是一般情况下都是使用的new RUnnable的方式的,这是一种好的习惯。就像写集合List list = new ArrayList()一样。

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

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