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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

一、前言
最近学习了Java的线程技术,感觉收获很多,现在我就来分享一下Java中实现线程的3种方式,由于本人技术有限,文中描述可能会有些不合理的地方,欢迎大家踊跃指出。
二、正文
(1)实现线程的第一种方式
          A:声明一个类继承Thread类。
          B:重写其中的Run()方法。
          C:初始化A声明的对象,并调用start()方法,那么这时,你就成功创建并开启一个线程。
(2)实现线程的第二种方式
          A:声明一个类实现Runable接口。
          B:重写其中的run()方法。
          C:实例化A中声明的类。
          D:将C中创建的对象传入Thread构造函数中含有Runable接口做参数中,并创建其实例。
          E:调用D中创建的实例的start()方法,你将成功开启一个线程。
(3)创建线程的第三种方式
          A:声明一个类实现Callable接口,重写其中的Call()方法。
          B:声明一个线程池对象(ThreadPoolExecutor)。
          C:创建A中类的一个实例。
          D:调用B中创建对象的submit(Callable task)方法,那么这时,你将成功创建并开启一个线程。
三、总结
创建线程有3中方式,个人感觉第二种好,因为它可以将资源的处理和业务逻辑分开,提高了系统的扩展性,至于第三种,由于本人技术有限,目前还没有见到太多的地方利用。

12 个回复

倒序浏览
kikt 发表于 2015-6-3 10:23
Runnable接口 不要写错了名字哦

嗯,谢谢,没注意到
回复 使用道具 举报
居然还有第三种实现方式,第一次见到喔!
回复 使用道具 举报
第三种方式怎么都没见到- -,难道是我学了忘记了吗
回复 使用道具 举报
经济 来自手机 中级黑马 2015-6-3 16:11:17
报纸
星辉祝愿 发表于 2015-6-3 12:38
居然还有第三种实现方式,第一次见到喔!

第三种不常用,但却是存在,jdk1.5提供的线程池中,提供了了方法,
回复 使用道具 举报
经济 来自手机 中级黑马 2015-6-3 16:12:38
地板
星辉祝愿 发表于 2015-6-3 12:38
居然还有第三种实现方式,第一次见到喔!

可以了解下,面试时,可以加分哈,
回复 使用道具 举报
第三种方式不了解,不过感谢楼主总结,学习了。
回复 使用道具 举报
感谢楼主总结、
回复 使用道具 举报
学习了,还有第三种方式
回复 使用道具 举报
信不信用定时器还能实现第四种???(开玩笑的,开发绝不能用定时器实现线程)
  1. package junit.test;

  2. import java.util.Date;
  3. import java.util.Timer;
  4. import java.util.TimerTask;
  5. import java.util.concurrent.atomic.AtomicInteger;

  6. public class TestTimer {
  7.         public static void main(String[] args) {
  8.                 final AtomicInteger i=new AtomicInteger(100);
  9.                
  10.                 new Timer().schedule(new TimerTask() {
  11.                         @Override
  12.                         public void run() {
  13.                                 while(i.intValue()>0){
  14.                                         System.out.println(Thread.currentThread().getName()
  15.                                                         +":"+i.getAndDecrement());
  16.                                 }
  17.                         }
  18.                 }, new Date());
  19.                
  20.                 new Timer().schedule(new TimerTask() {
  21.                         @Override
  22.                         public void run() {
  23.                                 while(i.intValue()>0){
  24.                                                 System.out.println(Thread.currentThread().getName()
  25.                                                                 +":"+i.getAndDecrement());
  26.                                 }
  27.                         }
  28.                 }, new Date());
  29.                
  30.                 while(i.intValue()>0){
  31.                         System.out.println(Thread.currentThread().getName()
  32.                                         +":"+i.getAndDecrement());
  33.                 }
  34.         }
  35. }
复制代码

回复 使用道具 举报
as604049322 发表于 2015-6-4 10:27
信不信用定时器还能实现第四种???(开玩笑的,开发绝不能用定时器实现线程)

...

信,我其中一个帖子,就是用定时器,定时删除文件夹下的全部内容
回复 使用道具 举报
好厉害 都是大神啊
回复 使用道具 举报
志行 发表于 2015-6-4 10:46
好厉害 都是大神啊

好好跟着老师视频学习,这都很简单,加油,:)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马