活动对象demo_me

package com.thread.activity;

import java.util.List;
import java.util.Random;
import java.util.concurrent.Callable;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;

public class ActivityObjectDemo
{
    private ExecutorService ex = Executors.newSingleThreadExecutor();

    private Random rand = new Random();

    // Insert a random delay to produce the effect of a calculation time:
    private void pause(int factor)
    {
        try
        {
            TimeUnit.MILLISECONDS.sleep(100 + rand.nextInt(factor));
        }
        catch (Exception e)
        {
            System.out.println("sleep() interrupted");
        }
    }

    public Future<Integer> calculateInt(final int x, final int y)
    {

        return ex.submit(new Callable<Integer>()
        {
            @Override
            public Integer call()
            {
                System.out.println("starting " + x + " + " + y);
                pause(500);
                return x + y;
            }

        });

    }

    public Future<Float> calculateFloat(final float x, final float y)
    {

        return ex.submit(new Callable<Float>()
        {
            @Override
            public Float call()
            {
                System.out.println("starting " + x + " + " + y);
                pause(2000);
                return x + y;
            }

        });
    }

    public void shutdown()
    {
        ex.shutdown();
    }

    public static void main(String[] args)
    {
        ActivityObjectDemo d1 = new ActivityObjectDemo();
        // prevents ConcurrentModificationException:
        List<Future<?>> results = new CopyOnWriteArrayList<Future<?>>();

        for (float f = 0.0f; f < 1.0f; f += 0.2f)
        {
            results.add(d1.calculateFloat(f, f));
        }
        for (int i = 0; i < 5; i++)
        {
            results.add(d1.calculateInt(i, i));
        }
        System.out.println("All asynch calls made");

        while (results.size() > 0)
        {
            for (Future<?> f : results)
            {
                if (f.isDone())
                {
                    try
                    {
                        System.out.println(f.get());
                    }
                    catch (Exception e)
                    {
                        throw new RuntimeException(e);
                    }
                    results.remove(f);
                }

            }
        }
        d1.shutdown();
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值