記錄一次多線程調用的demo


import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

/**
 * @Description
 * @date 2019年7月24日 上午9:58:17
 */
public class FutureTaskTest02 {
    public static void main(String[] args) throws Exception {

        ExecutorService executorService= Executors.newCachedThreadPool();

        System.out.println(System.currentTimeMillis());

        Future<String> thread1 = executorService.submit(new Callable<String>(){

            public String call() throws Exception {

                Thread.sleep(2000);
                return "1";
            }
        });

        Future<String> thread2 = executorService.submit(new Callable<String>(){

            public String call() throws Exception {

                Thread.sleep(5000);
                return "2";
            }
        });

        String S1=thread1.get();
        String S2=thread2.get();

        executorService.shutdown();
        System.out.println("S1:"+S1+",S2:"+S2);

        System.out.println(System.currentTimeMillis());


    }
}

第二個


import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

import com.google.common.util.concurrent.ThreadFactoryBuilder;

/**
 * @Description
 * @date 2019年7月23日 下午5:55:46
 */
public class FutureTaskTest {
	public static void main(String[] args) throws Exception {
		long start = System.currentTimeMillis();
		 ExecutorService executor = Executors.newCachedThreadPool();
//		ThreadFactory threadFactory = new ThreadFactoryBuilder().build();
//		ExecutorService executor = new ThreadPoolExecutor(10, 10, 60L, TimeUnit.SECONDS,
//				new ArrayBlockingQueue<Runnable>(10), threadFactory, new ThreadPoolExecutor.AbortPolicy());

		try {
			CustomCallable callable = new CustomCallable();
			FutureTask<Integer> callableTask = new FutureTask<Integer>(callable);
			executor.submit(callableTask);
			System.out.println("callableTask任務計算結果=" + callableTask.get());

			CustomRunnable runnable = new CustomRunnable();
			FutureTask<Void> runnableTask = new FutureTask<>(runnable, null);
			executor.submit(runnableTask);
			long end = System.currentTimeMillis();
			System.out.println("耗時:" + (end - start));
		} finally {
			executor.shutdown();
		}
	}
}

class CustomCallable implements Callable<Integer> {
	@Override
	public Integer call() throws Exception {
		System.out.println("call start");
		int sum = 0;
		for (int i = 0; i < 10; i++) {
			sum += i;
		}
		System.out.println("sum:" + sum);
		System.out.println("call:"+System.currentTimeMillis());
		return sum;
	}
}

class CustomRunnable implements Runnable {
	@Override
	public void run() {
		System.out.println("run start");
		int sum = 0;
		for (int i = 0; i < 10; i++) {
			sum += i;
		}
		System.out.println("RunnableTask任務計算結果=" + sum);
		System.out.println("run:"+System.currentTimeMillis());
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章