线程池,Executors,Callable,Lock,使用线程池,线程池的相关方法

目录

线程池

Executors

Callable

Future

Lock


线程池

        多线程存在的问题:

                一个线程大约占1mb的内存,大量的创建线程会导致内存溢出

                线程在执行完run方法后,会等到系统回收,会导致内存浪费

                频繁的创建和回收线程,会导致资源的浪费

        解决方案:

                线程池

        线程池作用:

                管理线程,创建,复用,销毁等

        线程池本质:

                容纳多个线程的容器

        线程池体系:

                Executor(接口)

                        提供的方法: 

                                void execute(Runnable command):执行线程任务

                                boolean isShutdown();判断线程次是否关闭

                                Future<?> submit(Runnable task):给线程池提交线程任务

                                Future<?> submit(Callable<?> task ):给线程池提交线程任务

                        子接口:

                                ScheduledExecutorService(调度线程池)

                                        提供的方法:ScheduledFuture<?> scheduleAtFixedRate(Runnable command,long initialDelay,long period,TimeUnit unit)

                                command:线 程 任 务
                                initialDelay:延 迟 时 间
                                period:间 隔 时 间
                        注 意 :

                                下 一 次 任 务 开 始 时 间 -上 一 次 任 务 开始 时 间 =间 隔 时 间
                                当 任 务 执 行 时 间 大 于 间 隔 时 间 ,下 一次 任 务 将 会 在 上 一 次 任 务                                 结束后 ,立 即 执 行
                                unit:时 间 单 位
        ScheduledFuture<?>        scheduleWithFixedDelay(Runnable command,long,initialDelay,
long delay,TimeUnit unit)
                                command:线 程 任 务
                                initialDelay:延 迟 时 间
                                period:间 隔 时 间
                注 意 :
                                下 一 次 任 务 开 始 时 间 -上 一 次 任 务 结束 时 间 =间 隔 时 间
                                unit:时 间 单 位

                子类:

                        ThreadPoolExecutor
                                构 造 函 数 :
                                        public ThreadPoolExecutor(int corePoolSize,
                                                                                int maximumPoolSize,
                                                                                long keepAliveTime,
                                                                                TimeUnit unit,
                                                                                BlockingQueue<Runnable> workQueue,
                                                                                ThreadFactory threadFactory,
                                                                                RejectedExecutionHandler handler)
                                        corePoolSize:核 心 线 程 数
                                        maximumPoolSize:最 大 线 程 数
                                        keepAliveTime:线 程 回 收 时 间
                                        unit:时 间 单 位
                                        workQueue:存 储 线 程 任 务 的 队 列
                                        threadFactory:线 程 工 厂
                                        handler:算 法

        线程池使用步骤:

                1,创 建 线 程 池
                2,提 交 任 务
                3,关 闭 线 程 池 ,注 意 抢 占 线 程 池 中 的 线 程 默 认 为 守 护 线 程

Executors

        作用:

                创建线程池

        提供的方法:

                static ExecutorService newFixedThreadPool(int nThreads):创建固定线程池
                static ExecutorService newSingleThreadExecutor():创建单例线程池
                static ExecutorService newCachedThreadPool():创建可变线程池
                static ScheduledExecutorService newSingleThreadScheduledExecutor():创建单例调度线程池
                static ScheduledExecutorService newScheduledThreadPool(int corePoolSize):创建调度线程池
                static ExecutorService newWorkStealingPool(int parallelism):创建抢占线程池

Callable

        问题:

                Runnable无法返回接口数据

        解决方案:

                使用Callable

        注意:

                只能给线程池使用

        Callable和Runnable的区别:

                Callable提 供 call方 法 ,有 返 回 值
                Runnable提 供 run方 法 ,没 有 返 回 值

Future

        作用:

                获取线程任务对象的返回值

        方法:

                V get()
        注 意 :

                会 阻 塞 当 前 线 程 ,直 到 对 应 的 线 程 任 务 执 行 完 毕 后 ,获 取 其 返 回 值

Lock

        作用:

                替换synchronized

        体系:

                Lock(接 口 )
                        提 供 的 方 法 :
                                void lock():锁
                                void unLock():开 锁

                子 类 :

                         提 供 的 方 法 :
                                ReentrantLock:重 入 锁
                                ReentrantReadWriteLock:读 写 锁
                        提 供 的 方 法 :

                                Lock readLock();获 取 读 锁
                                Lock writeLock():获 取 写 锁
                注 意 :
                        读 -读 不 互 斥
                        读 -写 互 斥
                        写 -写 互 斥
                经 验 :
                        读 里 面 用 读 锁
                        写 里 面 用 写 锁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值