楼主你好,很高兴和你交流。- import java.util.concurrent.*;
- class Test001
- {
- public static void main(String[] args) throws Exception //为了方便测试,我就直接抛出异常了
- {
- TicketWindow tw = new TicketWindow(); //Callable接口的实现类
- ExecutorService exec = Executors.newCachedThreadPool(); //线程池
- /*
- //第一种方式
- Future<String> f1 = exec.submit(tw); //首先是用Future类实现的,使用Future类就必须使用ExecutorService.submit()方法
- Future<String> f2 = exec.submit(tw);
- System.out.println("f1: " + f1.get());
- System.out.println("f2: " + f2.get());
- */
- /*
- //第二种方式
- FutureTask<String> ft1 = new FutureTask<String>(tw); //使用了FutureTask包装。
- FutureTask<String> ft2 = new FutureTask<String>(tw);
- exec.execute(ft1); //使用的是Executor.execute()方法
- exec.execute(ft2);
- System.out.println("ft1: " + ft1.get());
- System.out.println("ft2: " + ft2.get());
- */
- exec.shutdown();
- FutureTask<String> ft1 = new FutureTask<String>(tw); //第三种方式
- FutureTask<String> ft2 = new FutureTask<String>(tw);
- new Thread(ft1, "VIP").start();
- new Thread(ft2, "VIP2").start();
- System.out.println("ft1: " + ft1.get());
- System.out.println("ft2: " + ft2.get());
- }
- }
- class TicketWindow implements Callable<String>
- {
- private int ticket = 20;
- public String call() {
- System.out.println(Thread.currentThread().getName() + "启动了。。。");
- for(;ticket>0;) {
- System.out.println(Thread.currentThread().getName()+"---售出了第:"+ticket-- + "票");
- }
- return "已经售完。";
- }
- }
复制代码
具体解释我写在了注释中。
执行效果如下:
希望对你有所帮助。
|
|