在Java中,实现多线程代码有两种方式:一种是继承Thread类;另一种是实现Runnable接口。但是,继承Thread类不能资源共享,而实现Runnable接口可以资源共享。然而,Runnable接口实现的多线程会出现Runnable接口中的run()方法不能返回操作结果的问题。这时候就要用到新的接口:java.util.concurrent.Callable。如下:
package book;
import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;
class MyThread implements Callable<String>{
private int ticket=5;
public String call() throws Exception{
for(int i=0;i<100;i++) {
if(this.ticket>0) {
System.out.println("卖票:ticket="+this.ticket--);
}
}
return "票已卖光!";
}
}
public class JiOu {
public static void main(String args[]) throws Exception{
MyThread mt1=new MyThread();
MyThread mt2=new MyThread();
FutureTask<String>task1=new FutureTask<String>(mt1);
FutureTask<String>task2=new FutureTask<String>(mt2);
new Thread(task1).start();
new Thread(task2).start();
System.out.println("A线程返回的结果:"+task1.get());
System.out.println("B线程返回的结果:"+task2.get());
}
}
上面还用到了java.util.concurrent.FutureTask()<V>类来接收Callable接口对象实例,并且可以利用Future接口中的get()方法来接收call()方法的返回值。
运行结果:
卖票:ticket=5
卖票:ticket=4
卖票:ticket=3
卖票:ticket=2
卖票:ticket=5
卖票:ticket=1
卖票:ticket=4
卖票:ticket=3
卖票:ticket=2
卖票:ticket=1
A线程返回的结果:票已卖光!
B线程返回的结果:票已卖光!