`

【java】【 thread】runnable 只是一种描述任务的方式,任务需要线程来驱动

阅读更多
写道
package com.mywork.xz;

public class LiftOff implements Runnable {
protected int countDown = 10;// Default,倒数计数
/**
* 线程计数,java 中,当声明一个事物是static时, 表示这个事物,不会与包含它的那个类的对象关联
* 在一起,而是属于这个类。jvm中,执行new 创建 对象时,数据的存储空间才被分配。而static在 类被加载是就已经被执行了。
*/
private static int taskCount = 0;
private final int id = taskCount++;// 线程ID

public LiftOff() {
};

public LiftOff(int countDown) {
this.countDown = countDown;
}

public String status() {
return "#" + id + "(" + (countDown > 0 ? countDown : "LiftOff!") + ")";
}

public void run() {
while (countDown-- > 0) {
System.out.print(status());
Thread.yield();
}
}
}

 

写道
package com.mywork.xz;

public class MainThread {
public static void main(String[] args) {
for(int i=0;i<5;i++){
new LiftOff().run();
}
System.out.println("------");
for(int i=0;i<5;i++){
new Thread(new LiftOff()).start();
}
}
}

 输出结果:

前一个for循环:

#0(9)#0(8)#0(7)#0(6)#0(5)#0(4)#0(3)#0(2)#0(1)#0(LiftOff!)

#1(9)#1(8)#1(7)#1(6)#1(5)#1(4)#1(3)#1(2)#1(1)#1(LiftOff!)

#2(9)#2(8)#2(7)#2(6)#2(5)#2(4)#2(3)#2(2)#2(1)#2(LiftOff!)

#3(9)#3(8)#3(7)#3(6)#3(5)#3(4)#3(3)#3(2)#3(1)#3(LiftOff!

)#4(9)#4(8)#4(7)#4(6)#4(5)#4(4)#4(3)#4(2)#4(1)#4(LiftOff!)

 后一个for循环

#5(9)#5(8)#7(9)#5(7)#7(8)#5(6)#7(7)#6(9)#9(9)#8(9)#6(8)#8(8)#6(7)#8(7)#6(6)#8(6)#6(5)#8(5)#6(4)#8(4)#6(3)#8(3)#6(2)#8(2)#6(1)

#8(1)#6(LiftOff!)#8(LiftOff!)#5(5)#7(6)#7(5)#7(4)#7(3)#7(2)#7(1)#7(LiftOff!)#9(8)#5(4)#9(7)#5(3)#9(6)#5(2)#9(5)#5(1)#9(4)#5(LiftOff!)

#9(3)#9(2)#9(1)#9(LiftOff!)

 

 可见,run方法并无特殊之处,他不会产生任何内在的线程能力,要实现线程行为,你必须显示的将一个任务附着到线程上。

 

分享到:
评论

相关推荐

    java 面试题 总结

    assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。在实现中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为...

    超级有影响力霸气的Java面试题大全文档

    assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。在实现中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为...

    java面试题

    答:多线程有两种实现方法,一种是继承Thread类或者实现Runnable接口。同步就是在方法返回类型后面加上synchronized。 c#中的委托,事件是不是委托? 答:委托就是将方法作为一个参数带入另一个方法叫做委托,事件...

    疯狂JAVA讲义

    4.5.1 理解数组:数组也是一种类型 88 学生提问:int[]是一种类型吗?怎么使用这种类型呢? 88 4.5.2 定义数组 88 4.5.3 数组的初始化 89 学生提问:能不能只分配内存空间,不赋初始值呢?89 4.5.4 使用数组 90...

    BAT面试真题最新(涵盖全方面)

    java NIO的⼯工作原理 由⼀一个专⻔门的线程来处理理所有的 IO 事件,并负责分发。...你喜欢哪⼀一种?为什什么? 继承Thread类 实现Runnable接⼝口 应⽤用程序可以使⽤用Executor框架来创建线程池

    汪文君高并发编程实战视频资源全集

    │ 高并发编程第一阶段06讲、用Runnable接口将线程的逻辑执行单元从控制中抽取出来.mp4 │ 高并发编程第一阶段07讲、策略模式在Thread和Runnable中的应用分析.mp4 │ 高并发编程第一阶段08讲、构造Thread对象你...

    汪文君高并发编程实战视频资源下载.txt

    │ 高并发编程第一阶段06讲、用Runnable接口将线程的逻辑执行单元从控制中抽取出来.mp4 │ 高并发编程第一阶段07讲、策略模式在Thread和Runnable中的应用分析.mp4 │ 高并发编程第一阶段08讲、构造Thread对象你...

    java经典面试2010集锦100题(不看你后悔)

    A) 抽象类使类与类之间依旧具有父子联系,而接口一般只是定义了一种规范,并不使实现的接口之间具有父子关系。 B) 可以为抽象类定义对象,但是不能为接口定义对象。 C) 抽象类与接口的用法几乎都相同,具体用哪一个...

    Java开发技术大全 电子版

    8.3.2实现Runnable接口创建线程272 8.3.3使用isAlive()和join()等待子线程结束273 8.3.4设置线程优先级275 8.4线程的通信与协调277 8.4.1线程的互斥277 8.4.2线程的同步279 8.4.3暂停、恢复和停止线程282 ...

    java核心知识点整理.pdf

    25 JAVA8 与元数据.................................................................................................................................25 2.4. 垃圾回收与算法 .................................

    java程序设计与开发课件

    1.4 Java的3种版本······························ (4) 1.5 Java开发环境概述···························· (4) 1.5.1 JDK的安装、配置和使用·····...

    JAVA核心知识点整理(有效)

    25 JAVA8 与元数据.................................................................................................................................25 2.4. 垃圾回收与算法 .................................

Global site tag (gtag.js) - Google Analytics