线程池

1.创建线程,销毁线程是十分消耗资源的,所以不妨为其创建一个“池子”,专门的存放这些线程,使用完毕之后也不销毁,而是保留在那边,等待下一次的使用;为了很好的管理线程;

2.jdk自带的线程池:

a.newCachedThreadPool:创建一个可缓存的线程池,来一个任务就创建一个线程;但是执行完成之后这些线程会被回收回来,长时间无任务,这些线程会被销毁;被回收的线程一旦有新的任务出现,会优先使用这些线程;

b.newFixedThreadPool:创建一个定长的线程池,可以控制线程的最大并发数,超出最大并发数的线程会在队列中等待;

c.newScheduleThreadPool:创建一个定长的线程池,可用于定时或周期的执行任务;

d.newSingleThreadExecutor:创建一个单线程的线程池,这个线程池可以保证任务的顺序执行;并且可以保证不创建线程,所以不会消耗资源;线程池不用我们自己创建线程,而是自动帮助我们完成线程的创建; alt

3.使用线程池,线程;使用创建的线程池对象,并且执行方法;想线程池中的线程提交想要执行的任务:submit方法中可以传入一个runnanle对象,也可以传入一个callable对象,区别在前者没有返回值,后者存在返回值;


import com.ydlclass.lock.ThreadUtil;

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

public class newCachedThreadPool {
    public static void main(String[] args) {
        ExecutorService executorService = Executors.newFixedThreadPool(5);
        //创建一个fixedThreadPool线程池;
        ExecutorService executorService1 = Executors.newCachedThreadPool();

        //定义一个runnable类的对象,用于接下来向线程池中提交任务;
        Runnable task = () -> {
            ThreadUtil.sleep(2000);
            System.out.println("---------");
        };
        //向线程池中提交一次任务使用的方法:

        executorService.submit(task);

        //多次提交任务
        for (int i = 0; i < 50; i++) {
            //executorService.submit(task);//由于使用的是newFixedThreadPool线程池,所以一次执行的线程数的个数是固定的;
            executorService1.submit(task);//使用这种方法的线程池会一次性的创建50个线程用于执行任务;而不需要排队等待;
            

        }
    }
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
04-30 17:45
本人简历上&nbsp;1&nbsp;个&nbsp;RAG&nbsp;项目&nbsp;+&nbsp;1&nbsp;个&nbsp;Agent&nbsp;demo;这次面的是AI岗一面前我以为:背完八股&nbsp;+&nbsp;把项目讲清楚,应该能稳过。0-5&nbsp;min:自我介绍&nbsp;+&nbsp;项目背景-&nbsp;顺利。讲清楚了我的&nbsp;RAG&nbsp;是给法律咨询场景做的,痛点是大模型不懂行业术语。5-20&nbsp;min:项目深挖(开始崩)-&nbsp;Q1:你的法律文档总共多少?切了多少个&nbsp;chunk?-&nbsp;我:约&nbsp;500&nbsp;份&nbsp;PDF,5&nbsp;万个&nbsp;chunk-&nbsp;Q2:500&nbsp;份&nbsp;PDF&nbsp;加起来才&nbsp;5&nbsp;万&nbsp;chunk?平均每份&nbsp;100&nbsp;个&nbsp;chunk,你切片粒度是多少?-&nbsp;我:512&nbsp;token-&nbsp;Q3:法律文档里"第三条第二款"和"第三条之二"是不同含义,你的切片会不会把它切散?-&nbsp;我:(沉默&nbsp;5&nbsp;秒)……应该会-&nbsp;Q4:那你怎么解决?-&nbsp;我:我可以加一个&nbsp;metadata……(开始编)❌&nbsp;第一次崩:切片粒度没考虑业务语义。20-35&nbsp;min:评测体系(继续崩)-&nbsp;Q:你怎么知道你的&nbsp;RAG&nbsp;有效?-&nbsp;我:我用&nbsp;Recall@5……-&nbsp;Q:评测集多少条?怎么构造的?-&nbsp;我:100&nbsp;条,我手工标注的-&nbsp;Q:100&nbsp;条够吗?分布怎么样?-&nbsp;我:分布……我没分-&nbsp;Q:那你的&nbsp;Recall@5&nbsp;是&nbsp;0.81,你怎么知道这个数字是好是坏?baseline&nbsp;是什么?-&nbsp;我:(沉默&nbsp;10&nbsp;秒)❌&nbsp;第二次崩:没有&nbsp;baseline,没分布分析,纯靠"看起来还行"。35-55&nbsp;min:Agent&nbsp;部分(彻底崩)-&nbsp;Q:你的&nbsp;Agent&nbsp;demo&nbsp;用了几个工具?-&nbsp;我:3&nbsp;个,搜索、计算器、文档查询-&nbsp;Q:当用户问一个问题,你的&nbsp;Agent&nbsp;怎么决定调哪个工具?-&nbsp;我:用&nbsp;ReAct,让模型自己决定-&nbsp;Q:模型决策错了怎么办?-&nbsp;我:我加了个&nbsp;reflection……-&nbsp;Q:reflection&nbsp;失败&nbsp;3&nbsp;次后怎么处理?-&nbsp;我:(沉默&nbsp;15&nbsp;秒)……我没想过❌&nbsp;第三次崩:异常路径完全没设计。55-65&nbsp;min:业务理解&nbsp;+&nbsp;反问-&nbsp;Q:你觉得字节做&nbsp;AI&nbsp;应用最大的瓶颈是什么?-&nbsp;我:算力?数据?-&nbsp;Q:你看过哪些字节最近发的&nbsp;AI&nbsp;产品?-&nbsp;我:豆包、扣子……-&nbsp;Q:扣子是&nbsp;Agent&nbsp;平台还是工作流平台?-&nbsp;我:(再次沉默)❌&nbsp;第四次崩:对面试公司业务一无所知。
面试官拷打AI项目都会问...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务