(2)21.2.1定义任务Runnable接口

21.2.1定义任务
      线程可以驱动任务,因此需要一种描述任务的方式,这可以由Runnable接口来提供。要想定义任务,只有实现Runnable接口的run方法,使得该任务可以执行你的命令。

如下:

package jiangning.c21;
/**
 * Thinking in java c21 例1
 * time:2012.10.4
 * @author JiangNing
 * 显示倒计时的功能
 *
 */
public class LiftOff implements Runnable{//实现Runnable接口
	protected int countDown = 10;
	private static int taskCount = 0;
	private final int id = taskCount++;//用了区分任务的多个实例
	public LiftOff() {}
	public LiftOff(int countDown){
		this.countDown = countDown;
	}
	public String status(){
		return "#" + id + "(" +
		 (countDown > 0 ? countDown : "LiftOff!" )+"),";//如果countDown>0则取countDown否则取LiftOff!
	}
	public void run(){//重新编写Runnable接口中的run方法
		while(countDown-- >0){//设定跳出循环的条件
			System.out.print(status());//调用status()方法
			Thread.yield();//对线程调度器的一种建议:Java线程机制的一部分,
			//可以将CPU从一个线程转移给另一个线程
		}
	}
}


 

Thread.yield()静态方法的调用是对线程调度器的一种建议,它在声明:“我已经执行完生命周期中最重要的部分了,此刻正是切换给其它任务执行一段时间的大好时机。”这完全是选择性的,这里更有可能看到任务换进换出的证据。

在main方法中直接调用:

package jiangning.c21;
/**
 * Thinking in java c21 例2
 * time:2012.10.4
 * @author JiangNing
 * 创建LiftOff对象,并启动线程
 *
 */
public class MainThread {
	public static void main(String[] args) {
		LiftOff launch = new LiftOff();
		launch.run();//调用LiftOff的run方法
		System.out.println(Thread.currentThread().getName());//打印当前线程的名称
	}
}
/**
 * 运行结果
 * #0(9),#0(8),#0(7),#0(6),#0(5),#0(4),#0(3),#0(2),#0(1),#0(LiftOff!),main
 */


 

当从Runnable导出类时,它必须具有run方法,但是这个方法并没有什么特殊之处--它不会产生任何内在的线程能力。要实现线程行为,必须显示将一个任务附着到线程上。

这里用了线程,即总是分配main的那个线程。

总结:本小结主要讲了,实现Runnable接口的run方法,将任务放在run方法内来完成,主要用到while循环的退出条件。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值