Java Futrue模式简单例子和使用场景

之前看视频上别人讲解java的Futrue功能可以提高系统运行效率,之后有一点疑惑,通过一个简单的例子了解Futrue到底好处在哪。

例子很简单,通过一个线程池来让子线程去执行任务,主线程打印一句话后调用futrue的get()方法。

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.concurrent.*;

@RunWith(SpringRunner.class)
@SpringBootTest(classes={MyTest.class})// 指定启动类
public class MyTest {
    ThreadPoolExecutor pool = new ThreadPoolExecutor(5,10,30, TimeUnit.MINUTES,new ArrayBlockingQueue<Runnable>(10));

    @Test
    public void test() throws Exception {
        MyTest myTest = new MyTest();
        CallableThreads callableThreads = new CallableThreads();
        Future<Integer> submit = myTest.pool.submit(callableThreads);
        System.out.println("主线程让子线程执行费时操作了,自己又往下走了");
        Thread.sleep(2000);
        System.out.println("子线程返回值:"+submit.get());
        System.out.println("主线程结束");
    }
}

class CallableThreads implements Callable<Integer>{
    @Override
    public Integer  call() throws Exception {
        System.out.println(Thread.currentThread().getName());
        Thread.sleep(5000);
        return new Integer(1);
    }
}

 

结果如图所示,主线程开启子线程后自己又向下执行,遇到submit后阻塞,直到子线程执行完毕返回结果。

 

去掉主线程中的:

结果直接结束,看来submit()是关键。

由此得知,Futrue提高系统执行效率 指的是发挥CPU的多核并发能力,对于并发低的情况并没有太大突出特点

实际中如果要用的话,我认为最好放到费时业务之前,或者将费时业务拆分成多个子业务,然后分别利用futrue开启,主线程只负责等他们全部执行完毕后返回结果。

但是对于前台要求快速返回结果的情况,也没必要非要用futrue,可以采取MQ那种方式进行异步执行异步同步数据,通过补偿机制解决潜在数据风险

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值