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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 薄炳鑫 黑马帝   /  2012-6-23 20:58  /  1925 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 薄炳鑫 于 2012-6-23 22:35 编辑

在交通灯管理系统中,线程的执行用了这个Executors这个类的一些方法如:
ExecutorService pool = Executors.newSingleThreadExecutor();
pool.execute(new Runnable(){});
但是毕老师在讲线程的时候,执行线程是用下面的两种方式。
一种的是继承Thread方法,通过start()方法启动线程。
另外一种是通过实现Runnable接口,通过实现Runnable接口类的对象传递给Thread的构造器。然后通过start()方法来调用。
我想知道第一种和后面的两种有什么区别,哪个更好?还是根据一定的需求来选着相应的方法。

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

6 个回复

倒序浏览
Thread类是在java.lang包中定义的。一个类只要继承了Thread类同时覆写了本类中的run()方法就可以实现多线程操作了,但是一个类只能继承一个父类,这是此方法的局限;在程序开发中只要是多线程肯定永远以实现Runnable接口为主,因为实现Runnable接口相比继承Thread类有如下好处:
①避免继承的局限,一个类可以继承多个接口。
②适合于资源的共享
回复 使用道具 举报
whocases 发表于 2012-6-23 21:57
Thread类是在java.lang包中定义的。一个类只要继承了Thread类同时覆写了本类中的run()方法就可以实现多线程 ...

这个我明白,我想问的是
ExecutorService pool = Executors.newSingleThreadExecutor();
pool.execute(new Runnable(){});
和下面两种比较的优势和不足。在开发中,哪种比较常见?
回复 使用道具 举报
一个是线程池,一个是线程,完全不同的两个东西,开发中就我推断是后一种比较常见,毕竟concurrent包的东西太过深奥,而且不是所有的地方都有线程安全问题
当然玩多线程的同步和通信,基本上用concurrent包里的那一套了,那套api是一位java语言的大牛搞出来的,能看懂的话估计多线程无往不利。
回复 使用道具 举报
薄炳鑫 发表于 2012-6-23 22:00
这个我明白,我想问的是
ExecutorService pool = Executors.newSingleThreadExecutor();
pool.execute(ne ...

newSingleThreadExecutor:创建一个单线程的线程池。这个线程池只有一个线程在工作,也就是相当于单线程串行执行所有任务。如果这个唯一的线程因为异常结束,那么会有一个新的线程来替代它。此线程池保证所有任务的执行顺序按照任务的提交顺序执行。

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
whocases 发表于 2012-6-23 22:07
newSingleThreadExecutor:创建一个单线程的线程池。这个线程池只有一个线程在工作,也就是相当于单线程 ...

这个是不是和数据库连接池的那个概念一样。
始终存在的一个线程运行对象,当运行结束后也存在一个空的运行对象?
回复 使用道具 举报
线程池是JDK1.5后出现的新特性,是对线程的封装,同一个线程池的线程只能唤醒同一个线程池中的线程,这个视频中稍微说到了一点,开发中肯定是利用新特性了!!利用线程池可以一次创建一池10个线程,利用老方法你还得new10个呢!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马