并发包下的Callable接口

有返回值类型的线程

  1. 需要借助FutureTask类,这也是并发包 java.lang.Object下的一个普通类;这是Callable的一个辅助类 用于连接实现Callable线程和Thread线程类的工具

  2. 返回值类型也是借助FutureTask的get方法来得到返回值类型的;必须抛出异常且用一个变量来接它才能用System.out.println()的方式输出

  3. 注意::: 必须在所有线程启动后才能获取返回值;这个返回值是这个线程执行的次数或者这个线程需要返回的类型

  4. 注意Callable接口实现是由泛型的 这个是指定返回值类型的类型

        线程类1  指定返回值类型为Integer;返回值需要有个INteger的变量接住,且要强转为该泛型的类型
    
package callable接口;

import java.util.concurrent.Callable;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class Apple implements Callable<Integer> {
	int count=100;
	Lock lock=new ReentrantLock();

	@Override
	public Integer call() throws Exception {
		// TODO Auto-generated method stub
		int sum=0;
		
		while(count>0) {
			if(count<=0) {
				break;
			}
			lock.lock();
			System.out.println(Thread.currentThread().getName()+"抢到了第"+count+"苹果");
			lock.unlock();
			count--;
			sum++;
			Thread.yield();;
			
			
			
			
			
		}
		return sum;
		
		
		
	}
	

	

}

测试类

package callable接口;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

public class AppleTest {

	public static void main(String[] args) throws  ExecutionException, InterruptedException {
		// TODO Auto-generated method stub
		Apple apple=new Apple();
	
		
		FutureTask a1=new FutureTask(apple);
		FutureTask a2=new FutureTask(apple);
		
		
		Thread s1=new Thread(a1,"小红");
		Thread s2=new Thread(a2,"小强");
		s1.start();
		s2.start();
		Integer sk=(Integer) a1.get();
		Integer sk1=(Integer) a2.get();
		System.out.println("小红抢了:"+sk);
		System.out.println("小强抢了:"+sk1);
		

	}
	//结果
	/*
小红抢到了第100苹果
小强抢到了第99苹果
小强抢到了第98苹果
小强抢到了第97苹果
小强抢到了第96苹果
小红抢到了第95苹果
小强抢到了第94苹果
小强抢到了第93苹果
小强抢到了第92苹果
小强抢到了第91苹果
小强抢到了第90苹果
小红抢到了第89苹果
小强抢到了第88苹果
小红抢到了第87苹果
小强抢到了第86苹果
小红抢到了第85苹果
小强抢到了第84苹果
小红抢到了第83苹果
小强抢到了第82苹果
小红抢到了第81苹果
小强抢到了第80苹果
小红抢到了第79苹果
小强抢到了第78苹果
小强抢到了第77苹果
小强抢到了第76苹果
小强抢到了第75苹果
小强抢到了第74苹果
小强抢到了第73苹果
小强抢到了第72苹果
小强抢到了第71苹果
小强抢到了第70苹果
小强抢到了第69苹果
小强抢到了第68苹果
小强抢到了第67苹果
小强抢到了第66苹果
小强抢到了第65苹果
小强抢到了第64苹果
小强抢到了第63苹果
小强抢到了第62苹果
小强抢到了第61苹果
小红抢到了第60苹果
小强抢到了第59苹果
小强抢到了第58苹果
小强抢到了第57苹果
小强抢到了第56苹果
小强抢到了第55苹果
小强抢到了第54苹果
小强抢到了第53苹果
小强抢到了第52苹果
小强抢到了第51苹果
小强抢到了第50苹果
小强抢到了第49苹果
小红抢到了第48苹果
小红抢到了第47苹果
小红抢到了第46苹果
小红抢到了第45苹果
小红抢到了第44苹果
小红抢到了第43苹果
小红抢到了第42苹果
小红抢到了第41苹果
小红抢到了第40苹果
小红抢到了第39苹果
小红抢到了第38苹果
小强抢到了第37苹果
小红抢到了第36苹果
小红抢到了第35苹果
小红抢到了第34苹果
小红抢到了第33苹果
小红抢到了第32苹果
小红抢到了第31苹果
小红抢到了第30苹果
小红抢到了第29苹果
小红抢到了第28苹果
小强抢到了第27苹果
小红抢到了第26苹果
小红抢到了第25苹果
小红抢到了第24苹果
小红抢到了第23苹果
小红抢到了第22苹果
小红抢到了第21苹果
小红抢到了第20苹果
小红抢到了第19苹果
小红抢到了第18苹果
小强抢到了第17苹果
小红抢到了第16苹果
小红抢到了第15苹果
小红抢到了第14苹果
小红抢到了第13苹果
小红抢到了第12苹果
小红抢到了第11苹果
小红抢到了第10苹果
小红抢到了第9苹果
小红抢到了第8苹果
小强抢到了第7苹果
小红抢到了第6苹果
小红抢到了第5苹果
小红抢到了第4苹果
小红抢到了第3苹果
小红抢到了第2苹果
小红抢到了第1苹果
小强抢到了第0苹果
小红抢了:53
小强抢了:48
 多出来的一次是没有抢到的  小强 可怜


*/

}

线程类2

package callable接口;

import java.util.concurrent.Callable;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class Apple1 implements Callable<Integer> {
	int count =100;
	Lock lock=new ReentrantLock();
	

	@Override
	public Integer call() throws Exception {
		// TODO Auto-generated method stub
		int sum=0;
		if(count>0) {
			try {
				System.out.println(Thread.currentThread().getName()+count);
			}finally {
				lock.unlock();
			}
			
			count--;
			sum++;
		}
		
		
		
		return sum;
	}
	

}

测试类

package callable接口;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

public class Apple1Test {

	public static void main(String[] args) throws InterruptedException, ExecutionException {
		// TODO Auto-generated method stub
		Apple apple =new Apple();
		FutureTask s1=new FutureTask(apple);
		FutureTask s2=new FutureTask(apple);
		new Thread(s1,"小红").start();
		new Thread(s2,"小明").start();
		Integer ak1=(Integer)s1.get();
		Integer ak2=(Integer)s2.get();
		System.out.println("小红抢了:"+ak1);
		System.out.println("小明抢了:"+ak2);
		

	}
//结果
/*
小红抢到了第100苹果
小红抢到了第99苹果
小红抢到了第98苹果
小红抢到了第97苹果
小红抢到了第96苹果
小红抢到了第95苹果
小红抢到了第94苹果
小红抢到了第93苹果
小明抢到了第92苹果
小明抢到了第91苹果
小明抢到了第90苹果
小红抢到了第89苹果
小红抢到了第88苹果
小红抢到了第87苹果
小红抢到了第86苹果
小红抢到了第85苹果
小红抢到了第84苹果
小明抢到了第83苹果
小明抢到了第82苹果
小明抢到了第81苹果
小明抢到了第80苹果
小明抢到了第79苹果
小明抢到了第78苹果
小明抢到了第77苹果
小明抢到了第76苹果
小明抢到了第75苹果
小明抢到了第74苹果
小明抢到了第73苹果
小明抢到了第72苹果
小明抢到了第71苹果
小明抢到了第70苹果
小明抢到了第69苹果
小明抢到了第68苹果
小明抢到了第67苹果
小明抢到了第66苹果
小明抢到了第65苹果
小明抢到了第64苹果
小明抢到了第63苹果
小明抢到了第62苹果
小明抢到了第61苹果
小明抢到了第60苹果
小红抢到了第59苹果
小明抢到了第58苹果
小红抢到了第57苹果
小明抢到了第56苹果
小红抢到了第55苹果
小明抢到了第54苹果
小红抢到了第53苹果
小红抢到了第52苹果
小红抢到了第51苹果
小红抢到了第50苹果
小红抢到了第49苹果
小红抢到了第48苹果
小红抢到了第47苹果
小红抢到了第46苹果
小红抢到了第45苹果
小明抢到了第44苹果
小明抢到了第43苹果
小红抢到了第42苹果
小红抢到了第41苹果
小明抢到了第41苹果
小明抢到了第39苹果
小红抢到了第38苹果
小明抢到了第37苹果
小红抢到了第36苹果
小明抢到了第35苹果
小明抢到了第34苹果
小红抢到了第33苹果
小红抢到了第32苹果
小红抢到了第31苹果
小红抢到了第30苹果
小红抢到了第29苹果
小红抢到了第28苹果
小红抢到了第27苹果
小红抢到了第26苹果
小红抢到了第25苹果
小明抢到了第24苹果
小明抢到了第23苹果
小明抢到了第22苹果
小明抢到了第21苹果
小明抢到了第20苹果
小明抢到了第19苹果
小红抢到了第18苹果
小红抢到了第17苹果
小红抢到了第16苹果
小明抢到了第15苹果
小明抢到了第14苹果
小红抢到了第14苹果
小红抢到了第12苹果
小明抢到了第11苹果
小红抢到了第10苹果
小明抢到了第9苹果
小红抢到了第8苹果
小明抢到了第7苹果
小红抢到了第6苹果
小明抢到了第5苹果
小红抢到了第4苹果
小明抢到了第3苹果
小红抢到了第2苹果
小明抢到了第1苹果
小红抢了:49
小明抢了:51

*/
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值