/** * Created by xabcd on 2019/2/17. */ public class threadtickets { public static void main(String args[]) { thticket ti = new thticket(); new Thread(ti).start(); new Thread(ti).start(); new Thread(ti).start(); new Thread(ti).start(); } } class thticket implements Runnable { private int tickets = 20; public void run() { while(true) { if(tickets>0) System.out.println(Thread.currentThread().getName()+"出售票"+tickets--);
//Thr........Name()表示取得当前运行的线程名称
} } } Thread-0出售票20 Thread-3出售票17 Thread-2出售票18 Thread-1出售票19 Thread-2出售票14 Thread-3出售票15 Thread-0出售票16 Thread-3出售票11 Thread-2出售票12 Thread-2出售票8 Thread-2出售票7 Thread-2出售票6 Thread-2出售票5 Thread-2出售票4 Thread-2出售票3 Thread-2出售票2 Thread-2出售票1 Thread-1出售票13 Thread-3出售票9 Thread-0出售票10
实现 Runnable 接口 相对于 继承 Thread 类 来说, 有如 下 几个 显著 的 优势。
⑴ 适合 多个 相同 程序 代码 的 线程 去处 理 同一 资源 的 情况, 把 虚拟 CPU( 线程) 同 程序 的 代码、 数据 有效 分离, 较好 地 体现 了 面向 对象 的 设计 思想。
⑵ 可以避免 由于 Java 的 单 继承 特性 带来 的 局限。 开发 中经 常会 碰到 这样 一种 情况, 即要 将 已经 继承 了 某一个 类 的 子类 放入 多 线程 中, 由于 一个 类 不能 同时 有 两个 父 类, 所以 不能 使用 继承 Thread 类 的 方式, 那么 就 只能 采用 实现 Runnable 接口 的 方式。
⑶ 增强 了 程序 的 健壮性, 代码 能够 被 多个 线程 共享, 代码 与 数据 是 独立 的。 当 多个 线程 的 执行 代码 来自 同一个 类 的 实例 时, 即 称 它们 共享 相同 的 代码。 多个 线程 可以 操作 相同 的 数据, 与 它们 的 代码 无关。 当 共享 访问 相同 的 对象 时, 即 共享 相同 的 数据。 当 线程 被 构造 时, 需要 的 代码 和数 据 通过 一个 对象 作为 构造 方法 实 参 传递 进去, 这个 对象 就是 一个 实现 了 Runnable 接口 的 类 的 实例。
事实上, 几乎 所 有的 多 线程 应用 都可以 使用 第 2 种 方式, 即 实现 Runnable 接口。