并发
来杯茶的ni
因学习而年轻,因年轻而快乐
展开
-
线程池自学笔记14--取款业务练习
案例介绍:设计一个程序,使用两个线程模拟在两个地点同时从一个账号中取钱,假如卡中一共有1000元,每个线程取800元,要求演示结果一个线程取款成功,剩余200元,另一个线程取款失败,余额不足;要求:1:使用线程池创建线程2:解决线程安全问题思路提示:1:线程池可以利用Executors工厂类的静态方法,创建线程池对象;2:解决线程安全问题可以使用synchronized方法控制取钱的操作;3:在取款前,先判断余额是否足够,且保证余额判断和取钱行为的原子性;代码:编写任原创 2020-08-03 14:45:28 · 249 阅读 · 0 评论 -
线程池自学笔记13--秒杀商品练习
案例介绍: 假如某网上商城推出活动,新上架10部新手机免费送客户体验,要求所有参与活动的人员在规定的时间同时参与秒杀挣抢,假如有20人同时参与了该活动,请使用线程池模拟这个场景,保证前10人秒杀成功,后10人秒杀失败;要求: 1:使用线程池创建线程 2:解决线程安全问题思路提示: 1:既然商品总数量是10个,那么我们可以在创建线程池的时候初始化线程数是10个及以下,设计线程池最大数量为10个; 2:当某个线程执行完任务之后,可以让其他秒杀的人继续使用该线程...原创 2020-08-03 01:41:40 · 369 阅读 · 0 评论 -
线程池自学笔记12--异步计算结果(Future)
我们有时需要利用线程进行一些计算,然后获取这些计算的结果,而java中的Future接口就是专门用于描述异步计算结果的,我们可以通过Future 对象获取线程计算的结果;Future 的常用方法如下: boolean cancel(boolean mayInterruptIfRunning)试图取消对此任务的执行。 V get()如有必要,等待计算完成,然后获取其结果。 V get(long timeout, TimeUnit unit)如有必要,最多等待为使计算完成所给定的时间之后,获..原创 2020-08-03 01:13:17 · 252 阅读 · 0 评论 -
线程池自学笔记11--scheduleWithFixedDelay练习
编写任务类class MyRunnable3 implements Runnable{ private int id; public MyRunnable3(int id) { this.id = id; } @Override public void run() { String name = Thread.currentThread().getName(); try { Thread原创 2020-08-02 22:30:37 · 301 阅读 · 0 评论 -
线程池自学笔记10--scheduleAtFixedRate练习(间隔重复执行)
编写任务类class MyRunnable2 implements Runnable{ private int id; public MyRunnable2(int id) { this.id = id; } @Override public void run() { String name = Thread.currentThread().getName(); try { Thread原创 2020-08-02 22:26:53 · 693 阅读 · 0 评论 -
线程池自学笔记9--schedule练习
编写任务类class MyRunnable implements Runnable{ private int id; public MyRunnable(int id) { this.id = id; } @Override public void run() { String name = Thread.currentThread().getName(); System.out.println(name+"执原创 2020-08-02 22:19:54 · 149 阅读 · 0 评论 -
线程池自学笔记8--ScheduledExecutorService接口
ScheduledExecutorService是ExecutorService的子接口,具备了延迟运行或定期执行任务的能力,常用获取方式如下:static ScheduledExecutorService newScheduledThreadPool(int corePoolSize)创建一个可重用固定线程数的线程池且允许延迟运行或定期执行任务;static ScheduledExecutorService newScheduledThreadPool(int corePoolSize, Th原创 2020-08-02 22:16:48 · 289 阅读 · 0 评论 -
线程池自学笔记7--shutdown、shutdownNow练习
编写任务类/* 任务类,包含一个任务编号,在任务中,打印出是哪一个线程正在执行任务 */class MyRunnable4 implements Runnable{ private int id; public MyRunnable4(int id) { this.id = id; } @Override public void run() { //获取线程的名称,打印一句话 String name原创 2020-08-02 21:37:48 · 283 阅读 · 0 评论 -
线程池自学笔记6--newSingleThreadExecutor练习
编写任务类/* 任务类,包含一个任务编号,在任务中,打印出是哪一个线程正在执行任务 */class MyRunnable3 implements Runnable{ private int id; public MyRunnable3(int id) { this.id = id; } @Override public void run() { //获取线程的名称,打印一句话 String name原创 2020-08-02 21:11:03 · 226 阅读 · 0 评论 -
线程池自学笔记5--newFixedThreadPool练习
编写任务类/* 任务类,包含一个任务编号,在任务中,打印出是哪一个线程正在执行任务 */class MyRunnable2 implements Runnable{ private int id; public MyRunnable2(int id) { this.id = id; } @Override public void run() { //获取线程的名称,打印一句话 String name原创 2020-08-02 21:08:54 · 170 阅读 · 0 评论 -
线程池自学笔记4--newCachedThreadPool练习
编写任务类/* 任务类,包含一个任务编号,在任务中,打印出是哪一个线程正在执行任务 */class MyRunnable implements Runnable{ private int id; public MyRunnable(int id) { this.id = id; } @Override public void run() { //获取线程的名称,打印一句话 String name =原创 2020-08-02 19:19:04 · 237 阅读 · 0 评论 -
线程池自学笔记3--ExecutorService接口
一、ExecutorService介绍ExecutorService接口是java内置的线程池接口,通过学习接口中的方法,可以快速的掌握java内置线程池的基本使用常用方法: void shutdown() 启动一次顺序关闭,执行以前提交的任务,但不接受新任务。List<Runnable> shutdownNow() 停止所有正在执行的任务,暂停处理正在等待的任务,并返回等待执行的任务列表。<T> Future<T> submit(Callable.原创 2020-08-02 12:23:17 · 209 阅读 · 0 评论 -
线程池自学笔记2--线程池工作原理
我们要想自定义线程池,必须先了解线程池的工作原理,才能自己定义线程池; 这里我们通过观察java中ThreadPoolExecutor的源码来学习线程池的原理;一、ThreadPoolExecutor构造方法public ThreadPoolExecutor(int corePoolSize, //核心线程数量 int maximumPoolSize,// 最大线程数 l原创 2020-08-02 11:26:52 · 230 阅读 · 0 评论 -
线程池自学笔记1_线程池介绍
一、什么是线程池线程池其实就是一种多线程处理形式,处理过程中可以将任务添加到队列中,然后在创建线程后自动启动这些任务。二、为什么使用线程池使用线程池最大的原因就是可以根据系统的需求和硬件环境灵活的控制线程的数量,且可以对所有线程进行统一的管理和控制,从而提高系统的运行效率,降低系统运行运行压力三、优势线程和任务分离,提升线程重用性; 控制线程并发数量,降低服务器压力,统一管理所有线程; 提升系统响应速度,假如创建线程用的时间为T1,执行任务用的时间为T2,销毁线程用的时间为T3,那么原创 2020-07-13 18:55:19 · 111 阅读 · 0 评论