并发学习之--Runnable Thread(一)

本文探讨了如何定义并发任务,通过实现Runnable接口并编写run()方法来描述任务。任务通常包含循环,以维持运行状态。尽管Runnable没有内置的线程执行能力,但需与Thread结合使用以实现线程行为。Thread.yield()方法用于提示线程调度器让其他任务有机会执行。通过Thread构造器,Runnable对象转化为工作任务。当多个线程执行不同的任务时,线程调度器会自动进行线程的切换和处理器分配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 定义任务

线程可以驱动任务,你需要一种描述任务的方式。定义任务实现Runnable接口并编写run()方法,使得该任务可以执行你的命令。

package com.zghw.concurrent;

public class LiffOff implements Runnable {
	protected int countDown = 10;
	private static int taskCount = 0;
	private final int id = taskCount++;
	
	public LiffOff(){}
	public LiffOff(int countDown){
		this.countDown = countDown;
	}
	
	public String status(){
		return "#id("+id+")"+(countDown>0?countDown:"liffOff!");
	}
	
	@Override
	public void run() {
		while(countDown-->0){
			System.out.println(status());
			Thread.yield();
		}
		
	}

}



任务的run()方法通常总会有某种形式的循环,使得任务一直运行下去直到不再需要。

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

run()中对静态方法Thread.yield()的调用是对线程调度器的一种建议。它在声明:“我已经执行完生命周期中最重要的部分了,此刻正是切换给其他任务执行一段时间的大好时机。“

2.Thread

Runnable对象转变为工作任务的传统方式是把它提交给一个Thread构造器

package com.zghw.concurrent;

public class BasicThread {
	public static void main(String args[]){
		Thread thread =new Thread(new LiffOff());
		thread.start();
		System.out.println("Wait for liffOff!");
	}
}
Thead构造器只需要一个Runnable对象。调用Thread对象的start()方法为该线程执行必须的初始化操作,然后调用Runnablerun()方法,以便在这个新线程中启动该任务。尽管start()看起来是产生了一个对长期运行方法的调用,但是从输出中可以看到,start()迅速地返回了,因为Waitingfor消息在倒计时完成之前就出现了。程序会同时运行两个方法,main()LiftOff.run()是程序中与其他线程“同时“执行的代码。

3.更多线程驱动更多任务

package com.zghw.concurrent;

public class MoreBasicThread {
	public static void main(String args[]){
		for(int i=0;i<5;i++){
			Thread thread =new Thread(new LiffOff());
			thread.start();
		}
		System.out.println("Wait for liffOff!");
	}
}


输出说明不同任务的执行在线程被换进换出时混在一起。这种交换是有线程调度器自动控制的。如果在你的机器上有多个处理器,线程调度器将会在这些处理器之间默默地分发线程。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值