mall改造:mall中用到的多线程技术

 

我们在面试的时候,经常会在要求中看见,需要熟悉多线程和分布式相关技术。但是除非我们是所在的公司是互联网公司,否则平时的一些项目很少有用到多线程。最多就是用到了线程池去批量的跑任务或者跑数据。

 

今天我们在这里说一说litemall中所用到的线程池。

 

1、延迟任务

首先我们来介绍一下Delayed,

Delayed,一种混合风格的接口,用来标记那些应该在给定延迟时间之后执行的对象。此接口的实现必须定义一个 compareTo 方法,该方法提供与此接口的 getDelay 方法一致的排序。 getDelay的方法返回时剩余的延迟时间。

mall改造:mall中用到的多线程技术

mall改造:mall中用到的多线程技术

mall改造:mall中用到的多线程技术

 

相关源码解读:

1)首先我们可以看到addTask方法,向阻塞队列中添加task,这个Task是我们自定义的对象。
2)Task对象有两个属性id和start, start的时间,为当前时间+延迟的时间,排序规则是根据时间放入队列Ints.saturatedCast:把long转化为int,超过范围则用最接近的int替代。

3)DelayQueue<Task> 队列,在线程池下,去一个一个执行。

4)Executors.newSingleThreadExecutor() 线程池,这个线程池的好处是不会发生改变,从头到尾都是一个线程去执行,虽然newFixedThreadPool(1)也是一个线程,但是当运行过程中newFixedThreadPool(2) 发生改变,线程数就会被重置,当需求是一个线程,要用newSingleThreadExecutor();

 

2、线程池创建线程去执行任务。

mall改造:mall中用到的多线程技术

mall改造:mall中用到的多线程技术

 

相关源码解读:

1)具体是创建Callable接口的实现类,并实现clall()方法。并使用FutureTask类来包装Callable实现类的对象,且以此FutureTask对象作为Thread对象的target来创建线程。

2)executorService.submit去执行,bannerTask.get() 获取结果

3)Executors.newFixedThreadPool(10) 来创建线程。

 

3、线程安全集合做缓存

mall改造:mall中用到的多线程技术

 

相关源码解读:

1)public static 修改,说明captchaCodeCache 只会创建一个,所有可以当做缓存。

2)LocalDateTime 是对Date的一种升级,在Date的基础上增加了方法。

3)这里为什么不用HashMap,因为hashMap是线程不安全的。

 

喜欢点下关注,你的关注是我写作的最大支持

mall改造:mall中用到的多线程技术mall改造:mall中用到的多线程技术

mall改造:mall中用到的多线程技术mall改造:mall中用到的多线程技术

mall改造:mall中用到的多线程技术mall改造:mall中用到的多线程技术