java jhap_Java基础-创建线程的三种方法及其对比

1.继承Thread类

1)定义Thread类的子类,并重写run方法,run方法就是线程要执行的任务,将其称为执行体。

2)创建Thread类子类的对象,即创建了线程对象。

3)调用线程对象的start()方法来启动该线程。

1 public class MyThread extendsThread {2

3 publicMyThread(){}4

5 //set name

6 publicMyThread(String name){7 super(name);8 }9

10 @Override11 public voidrun(){12 System.out.println(Thread.currentThread().getName());13 }14 }

2.创建实现runnable接口的类对象

1)定义runnable接口的实现类,并重写该接口的run()方法,该run()方法的方法体同样是该线程的线程执行体。

2)创建 Runnable实现类的实例,并依此实例作为Thread的target来创建Thread对象,该Thread对象才是真正的线程对象

3)调用线程对象的start()方法来启动该线程

与Thread方法相比较,1)Runnable方法更加灵活,避免了单继承的局限性:Thread方法不能继承其他类。实现Runnable接口后,还可以继续继承其他类

2)增强了程序的扩展性,降低了程序的耦合性:实现了设置线程任务和开启线程进行了分离(解耦),实现类中,重写了run方法

3)如果要访问当前线程,则必须使用Thread.currentThread()方法,而继承方法只需要使用this方法即可访问当前线程

1 class RunnableImpl implementsRunnable {2

3 @Override4 public voidrun() {5 for (int i = 0; i < 20; i++){6 System.out.println(Thread.currentThread().getName()+"-->"+i);7 }8 }9 }10

11 public classTest04 {12 public static voidmain(String[] args) {13 RunnableImpl run = newRunnableImpl();14 Thread t = newThread(run);15 t.start();16

17 for (int i = 0;i < 20;i++){18 System.out.println(Thread.currentThread().getName() + "-->"+i);19 }20 }21 }

3.匿名内部类实现创建Thread

此处使用匿名内部类主要作用是简化代码,将子类继承父类重写方法,创建子类对象,合并为一步完成。

JDK1.8发布以后,可以用lambda表达式代替内部类达到简化代码的目的

1 public classInnerClassThread {2 public static voidmain(String[] args) {3

4 //InnerClass implement

5 newThread(){6 @Override7 public voidrun(){8 for (int i=0; i < 20;i++){9 System.out.println(Thread.currentThread().getName()+"-->"+"Ben");10 }11 }12 }.start();13

14 Runnable r = new Runnable() { //Polymorphism

15 @Override16 public voidrun() {17 for (int i = 0;i<20;i++){18 System.out.println(Thread.currentThread().getName()+"-->"+"Allen");19 }20 }21 };22 newThread(r).start();23

24 //InnerClass implement use interface Runnable

25 new Thread(newRunnable() {26 @Override27 public voidrun() {28 for(int i = 0;i < 20;i++){29 System.out.println(Thread.currentThread().getName() + "-->"+"Amy");30 }31 }32 }).start();33

34 //Lambda Implements

35 new Thread(()->{36 System.out.println(Thread.currentThread().getName() + "-->"+"Bob");37 }).start();38 }39 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值