android java thread_Android-Java-Thread线程两种方式的使用场景

Thread线程两种方式的优点/缺点

extends Thread 方式:

缺点:存在耦合度(因为线程任务run方法里面的业务逻辑 和 线程启动耦合了)

缺点:Cat extends Thread {} 后无法在继承其他的类了

优点:没有继承关系 并 简单的单线程,可以使用 extends Thread 方式

Runnable方式:

优点:第一种方式存在耦合度,第二种方式就解耦了,因为线程任务run方法里面的业务逻辑 和 线程启动分离了)

Runnable实现类

new Thread().start();

new Thread(传递Runnable实现类).start();

优点:Cat implements Runnable {} 后 还可以继承其他的类了

优点:Runnable方式 有着面向对象思想的考虑

1.运行多线程要使用Runnable方式;

以下这个案例如果使用  extends Thread 的方式会出现 四个线程对象都持有自己的ticket变量和业务逻辑,给程序开发者带来麻烦

使用Runnable的方式   Runnable实现类Booking给四个Thread去执行的,这样四个线程去 调用 (一个ticket变量和业务逻辑的Runnable实现类)这才是面向对象思想

packageandroid.java.thread07;/*** 售票线程*/

class Booking implementsRunnable {/*** 模拟票的总算 10张票*/

private int ticket = 10;

@Overridepublic voidrun() {while (ticket > 0) {if (ticket > 0) {

System.out.println("名称:" + Thread.currentThread().getName() + "窗口卖出第" + ticket + "张票");

ticket--;

}

}

}

}/*** 售票案例*/

public classBookingTest {public static voidmain(String[] args) {/*** 定义Runnable实现类Booking,此实现类Booking不是线程,此实现类Booking给四个Thread去执行的*/Runnable booking= newBooking();//实例化线程对象

Thread thread1 = new Thread(booking); //此实现类Booking给Thread去执行的

Thread thread2 = new Thread(booking); //此实现类Booking给Thread去执行的

Thread thread3 = new Thread(booking); //此实现类Booking给Thread去执行的

Thread thread4 = new Thread(booking); //此实现类Booking给Thread去执行的//开启启动线程

thread1.start(); //启动第Thread-0窗口 执行卖票任务

thread2.start(); //启动第Thread-1窗口 执行卖票任务

thread3.start(); //启动第Thread-2窗口 执行卖票任务

thread4.start(); //启动第Thread-3窗口 执行卖票任务

}

}

2.有着继承关系开发的时候,要使用Runnable方式;

1.Dog有着动物的行为call(), 同时还要扩展去执行奔跑的任务,这就是Runnable的好处,所以说Runnable这种方式才是面向对象的思想

2.如果使用 extends Thread 的方式,以下代码写下去还合理么

packageandroid.java.thread08;/*** 定义一个动物类 属于动物父类*/

abstract classAnimal {/*** 动物叫的行为,抽象的*/

public abstract voidcall();

}/*** 狗类*/

class Dog extends Animal implementsRunnable{/*** 动物叫的行为,抽象的*/@Overridepublic voidcall() {

System.out.println("汪汪汪.....");

}/***@seeThread#run()*/@Overridepublic voidrun() {

System.out.println("狗狗🐶 在自由自在的奔跑");

}

}public classTest {public static voidmain(String[] args) {//创建狗对象

Dog dog = newDog();//调用狗自己的行为

dog.call();//启动 Runnable实现类Dog对象的奔跑任务

newThread(dog).start();

}

}

3.单任务线程,很明确只执行一个任务,可以使用 extends Thread方式

packageandroid.java.thread08;class For100 extendsThread {

@Overridepublic voidrun() {super.run();for (int i = 0; i < 100; i++) {

System.out.print(i);

}

}

}public classTest2 {public static voidmain(String[] args) {newFor100().start();

}

}

4.在自定义代码中,执行匿名任务,可以使用 extends Thread 方式

public classTest2 {public static voidmain(String[] args) {//new For100().start();

newThread(){

@Overridepublic voidrun() {super.run();//比较耗时的任务//....

}

}.start();

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值