java jdk 5.0新增的两种线程创建方式

新增方式一: 实现callable接口。Callable是Runnable的子接口,其实在创建新线程的时候,用的还是Thread(Runnable target)构造器。只不过与实现Runnable接口相比,callable功能更强一些
相比run()方法,可以有返回值
方法可以抛出异常
支持泛型的返回值,返回值为泛型指定的类型。
需要借助FutureTask类,比如获取返回结果
FutureTask 是Futrue接口的唯一的实现类,FutrueTask同时实现了Runnable和Future接口,它既可以作为Runnable重写run方法被线程执行,又可以作为Futrue调用get方法得到Callable的返回值。

//1.0创建一个实现Callable接口的类
class NumThread implements Callable{
	public Object call ()Throws Exception{	//2.0重写call方法
		int sum =0;
		for(int i = 0; i<=100;i++){
		System.out.println(i);
		sum = sum+i;
		}
		return sum;
		
	}
}


public class ThreadNew{
	public static void main (String[] args ) throws Exception{
		NumThread numThread = new NumThread ();		//3.0创建Callable实现类的对象
		FutureTask futureTask = new FutureTask(numThread);		//	4.0将此Callable接口实现类的对象作为参数传递到FutureTask的构造器中,创建Futrue对象
		new Thread (futureTask).start();  		//5.0将FutureTask的对象作为参数传递到Thread类的构造器。启动线程。
		Object sum = futureTask.get();			//6.0获取返回值
	}
}

新增方式2:
jdk 5.0起提供了线程池相关API ExecutorService 和 Executors
ExecutorService:真正的线程池接口。常见的子类ThreadPoolExecutor
其方法:void execute(Runnable command):执行命令/任务,没有返回值,一般用来执行Runnable
Futuresubmit(Callable task):执行任务,有返回值,一般用来执行Callable
void shoutdown():关闭连接池

Executors:工具类、线程池的工具类,用于创建并返回不同类型的线程池。

1.0 提供指定线程数量的线程池
2.0执行指定的线程操作,需要提供实现Runnable接口或Callable接口的类的对象
3.0关闭连接池

public class ThreadPool{
	public static void main (){
		ExecutorService service = Executors.newFixedThreadPool(10);
		service.execute(new NumThread());	//适用于Runnable
		//service.submit(Callable callable );		//适用于callable
		ervice.submit(new NumThread1());
		service.shutdown();
	}
}

class NumThread implements Runnable  {
		void run(){}
}

class NumThread1 implements Callable  {
		void call(){}
}

使用线程池创建新线程的好处:
1.提高响应速度,减少了创建新线程的时间
2.降低资源消耗,重复利用线程池中的线程,不需要每次都创建
3.便于线程管理
设置线程池的属性(大小,时间等等)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值