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实现类)这才是面向对象思想
package android.java.thread07; /**
* 售票线程
*/
class Booking implements Runnable { /**
* 模拟票的总算 10张票
*/
private int ticket = 10; @Override
public void run() { while (ticket > 0) {
if (ticket > 0) {
System.out.println("名称:" + Thread.currentThread().getName() + "窗口卖出第" + ticket + "张票");
ticket--;
}
} }
} /**
* 售票案例
*/
public class BookingTest { public static void main(String[] args) { /**
* 定义Runnable实现类Booking,此实现类Booking不是线程,此实现类Booking给四个Thread去执行的
*/
Runnable booking = new Booking(); // 实例化线程对象
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 的方式,以下代码写下去还合理么
package android.java.thread08; /**
* 定义一个动物类 属于动物父类
*/
abstract class Animal { /**
* 动物叫的行为,抽象的
*/
public abstract void call(); } /**
* 狗类
*/
class Dog extends Animal implements Runnable{ /**
* 动物叫的行为,抽象的
*/
@Override
public void call() {
System.out.println("汪汪汪.....");
} /**
* @see Thread#run()
*/
@Override
public void run() {
System.out.println("狗狗Android-Java-Thread线程两种方式的使用场景的更多相关文章
- java笔记线程两种方式模拟电影院卖票
public class SellTicketDemo { public static void main(String[] args) { // 创建三个线程对象 SellTicket st1 = ...
- Android请求服务器的两种方式--post, get的区别
android中用get和post方式向服务器提交请求_疯狂之桥_新浪博客http://blog.sina.com.cn/s/blog_a46817ff01017yxt.html Android提交数 ...
- 一步步分析Java深拷贝的两种方式-clone和序列化
今天遇到一道面试题,询问深拷贝的两种方法.主要就是clone方法和序列化方法.今天就来分析一下这两种方式如何实现深拷贝.如果想跳过解析的朋友,直奔"重点来了!"寻找答案. clon ...
- 创建Java多线程的两种方式和线程异常
一.使用多线程的两种方法 使用多线程的两种方法有:继承Thread类和实现runable接口. 二.继承Thread类 来看一下thread类的源代码: class Thread implement ...
- Android多activity启动两种方式浅谈
(1)第一种方式就是常见的通过intent来启动,被启动的activity需要在mainfest里面注册activity (2)第二种就是通过setContentView来启动,这里activity不 ...
- Java异常处理的两种方式以及自定义异常的使用方法
异常 就是程序出现了不正常的情况 Error:严重问题,不需要处理 Exception:称为异常类,他表示程序本身可以处理的问题 RuntimeException:在编译期是不检查的,出现问题后,需要 ...
- android 启动 service 的两种方式,及什么时候用哪个 android 什么时候用bindService
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha android 什么时候用bindService ============ 启动方式有 ...
- Android启动Activity的两种方式与四种启动模式
1.在一个Activity中调用startActivity()方法 2.在一个Activity中调用startActivityRequest()方法. 重写onActivityResult方法,用来接 ...
- Windows服务中用Timer和线程两种方式来执行定时任务
在Service服务文件夹下新建Windows服务 - TestService
随机推荐
- [Robot Framework] 怎么做数学运算?
运用BuiltIn里面的Set Variable
- Servlet 2.x 规范
Servlet 2.x 规范 sun 公司制订的一种基于 Java 技术的 WEB 服务器功能的组件规范.1997 年六月,Servlet 1.0 版本发行,最新版本 Servlet 4.0 处于研发 ...
- Minimum Size Subarray Sum LT209
Given an array of n positive integers and a positive integer s, find the minimal length of a contigu ...
- 【转】 vxWorks下常用的几种延时方法
在应用编程的时候,通常会碰到需要一个任务在特定的延时之后执行一个指定的动作,如等待外设以确保数据可靠,控制扬声器发声时间以及串口通信超时重发等.这就需要利用定时器机制来计量特定长度的时间段. vxWo ...
- 2016年3月31日_应化所群体Review
Review目的: Phonegap的ble插件可以接收到设备发送的信息,但接收并在控制台显示的数据夏一鸣不知道是正确的数据,还是由于编码解码问题导致的乱码问题.此次Review要解决的问题即判断接收 ...
- WordCount改进 小组项目
GitHub地址:https://github.com/DM-Star/WordCount-opt 作业需求:http://www.cnblogs.com/ningjing-zhiyuan/p/865 ...
- ThinkPHP getBy动态查询
getBy动态查询 ThinkPHP getBy动态查询是一个魔术方法,可以根据某个字段名称动态得到对应的一条数据记录. 根据用户名(username)查询对应的用户资料记录: public func ...
- Laravel创建自定义 Artisan 控制台命令实例教程
来源:http://laravelacademy.org/post/1374.html 1.入门 Laravel通过Artisan提供了强大的控制台命令来处理非浏览器业务逻辑.要查看Laravel中所 ...
- 对象序列化:pickle和shelve
import pickle class DVD: def __init__(self,tilte,year=None,duration=None,director_id=None): self.tit ...
- 从模板驱动文件ins生成cls文件
在当前目录下,启动cmd程序,输入以下指令: latex acmart.ins