Java FutureTask Callable单线程/线程池示范代码

  • 效果图

在这里插入图片描述

  • 代码

import java.util.Date;
import java.util.concurrent.*;

public class MyFutureTaskTest {
    //使用线程池方式
    public static final void threadPool() throws InterruptedException, ExecutionException, TimeoutException {
        System.out.println("start time "+new Date().toLocaleString());
        //创建4个线程的线程池
        ExecutorService executorService=Executors.newFixedThreadPool(4);
        Callable<User> userCallable= () -> {
            //使用sleep模拟耗时长的任务进行中
            Thread.sleep(500);
            System.out.println("线程"+Thread.currentThread().getName());
            return new User("test","123");
        };

        FutureTask<User> futureTask[]=new FutureTask[10];
        for(int i=0;i<10;i++)
        {
            futureTask[i]=new FutureTask<>(userCallable);
            executorService.submit(futureTask[i]);
            User user=futureTask[i].get(2, TimeUnit.SECONDS);
            System.out.println("end time "+new Date().toLocaleString()+" successfully got user, User; "+user.toString());
        }
        //关闭线程池
        executorService.shutdown();
    }
    //直接创建线程方式
    public static final void single() throws InterruptedException, ExecutionException, TimeoutException {
        System.out.println("start time "+new Date().toLocaleString());
        Callable<User> userCallable= () -> {
            //使用sleep模拟耗时长的任务进行中
            Thread.sleep(1500);
            return new User("test","123");
        };
        FutureTask<User> futureTask=new FutureTask<User>(userCallable);
        new Thread(futureTask).start();
        User user=futureTask.get(2, TimeUnit.SECONDS);
        System.out.println("end time "+new Date().toLocaleString()+" successfully got user, User; "+user.toString());
    }
    public static void main(String[] args) throws ExecutionException, InterruptedException, TimeoutException {
        //单线程方式使用
        single();
        //线程池方式使用
        threadPool();
    }
}
class User {
    private String username;
    private String password;
    public User(){

    }
    public User(String username,String password){
        this.username=username;
        this.password=password;
    }
    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}
posted @ 2020-11-18 16:50  HumorChen99  阅读(0)  评论(0编辑  收藏  举报  来源