多线程
文章平均质量分 71
DanceDonkey
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
自定义封装异步任务组件,实现FutureTask功能
就是取决于当前对象的标签,例如我有一个翁,标签是 钥匙,那我需要一个处置东西的工具、而这个处置东西的工具也可以打标签,例如可以处置杯子、处置木头、处置钥匙等,那这个地方的意思就是我需要一个Consumer类型的对象,这个对象的标签是T,而T是哪里来的,T是在创建当前对象的时候定义好的,也就是类似常说的出厂设置,这个实例在创建的时候就知道自己的泛型,即 某个翁在制造好出厂的时候就打好标签了。泛型就相当于翁的一个标签,标识着此翁装配的东西,有的实例方法需要的参数也是带着泛型的,例如AsyncTask中的。原创 2023-09-07 21:17:50 · 271 阅读 · 0 评论 -
多线程实现与管理
线程也有自己的TID。假设有有一个存取队列的场景,有A、B两个线程,一个线程去队列中存数据,另一个线程取队列中的数据,但是取数据的线程不知道存的线程什么时候放,如果使用while去一直监听的话,这样会造成系统资源的浪费,更好的一种做法就是取线程如果获取不到数据,则进入等待状态,待存线程存入数据后 再通过取线程去获取。上述的 synchronized 锁的对象是有严重的线程安全问题的,因为每次锁的都是一个新创建出来的新对象,这个对象是刚创建出来的,对象头中的锁信息没有,则每次来一个线程都可以进入方法执行。原创 2023-08-20 22:29:38 · 369 阅读 · 0 评论 -
双线程利用wait、notifyAll实现交替打印输出
notify 方法,唤醒同一个synchronized 锁对象调用wait方法进入等待状态的线程,notify方法不会释放锁,会正常执行业务逻辑,唤醒了wait线程以后,被唤醒的哪些wait线程可以执行代码了,但是必须要等到notify的线程执行到wait时才可以,因为synchronized 代码块保证了同一时刻最多只能有一个线程去执行。wait和notify是线程之间通信的重要方法,明确这两个方法的执行时机,会不会释放锁,释放锁之后的操作等等。原创 2023-08-20 18:01:09 · 393 阅读 · 0 评论 -
线程池的核心参数
使用线程池的好处可重复利用线程资源,避免频繁创建和销毁。统一管理系统中的线程,避免创建过多的线程影响系统性能。创建一个线程池 ExecutorService executorService = new ThreadPoolExecutor( 10,//corePoolSize 50,//maximumPoolSize 3,//keepAliveTime .原创 2022-05-26 21:55:22 · 1388 阅读 · 0 评论 -
利用ThreadLocal实现不同方法的值获取
假设有这么个需求,用户登录系统以后,将用户的token存入浏览器的本地存储,每次发送请求时将用户token携带上,方便后台控制层或业务层获取,那么此时可以有什么解决方案?利用拦截器获取请求头中的token,然后将token存入请求域中,然后将这个request传入controller,controller再传给service,其实这里也不用再将token存入请求域,我们可以直接将这个request传入service,这样看起来也确实可以,但是假如业务方法很多,每个方法都需要token,难道还需要每个方原创 2021-11-30 21:49:32 · 1958 阅读 · 0 评论 -
如何优雅地设计一个秒杀接口
秒杀接口主要考虑的几个关键问题是数据库超卖、接口限流,让系统能抗住大并发量,抛出非法请求等。乐观锁方式超卖在大并发量下,首先要考虑的问题就是线程安全问题。秒杀的三个步骤大致可分为 1.根据商品id查询商品的库存 2.如果库存充足扣减库存并更新 3.生成订单。为什么会出现超卖问题?假设总库存是100,第一个线程进来,查询没问题,并且让商品对象的库存减一,此时的库存数量更新为99,但是,没有更新数据库,这个线程的时间片就用完了第二个线程进来,查询没问题,并且让商品对象的库存减一此时的库存数量更新原创 2021-04-05 17:14:46 · 807 阅读 · 2 评论 -
两种实现多线程方式解决同步问题
案例:分别用继承Thread和实现Runable接口的方式实现三个窗口卖票操作。继承Theard方式public class ThreadTest { public static void main(String[] args) { Ticket ticket1 = new Ticket(); Ticket ticket2 = new Ticket(); Ticket ticket3 = new Ticket(); tic原创 2021-03-30 22:01:44 · 233 阅读 · 0 评论 -
CompletableFuture异步编排
CompletableFuture是JDK8新引入的异步编排方式,并可结合线程池来使用首先声明一个线程池private static ExecutorService executors = Executors.newFixedThreadPool(10);有返回结果的异步调用 supplyAsync CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> {原创 2020-09-19 15:05:57 · 147 阅读 · 0 评论 -
基于Redis和Redisson的分布式锁的实现
一、环境搭建在redis服务器存储了一个key,值为100Java业务代码,业务逻辑为如果redis中的key值大于0,则减1并更新@GetMapping("reduce/stock") public String reduceStock(){ String stock = redisTemplate.opsForValue().get("stock"); if (!StringUtils.isEmpty(stock)){ Intege原创 2020-09-07 16:14:30 · 219 阅读 · 0 评论 -
JMeter创建线程以及线程组
一、添加线程组设置相关配置二、创建Http请求设置接口路径三、添加聚合报告四、执行请求,查看聚合报告原创 2020-09-07 15:05:26 · 1363 阅读 · 0 评论 -
线程的状态以及Callable接口的使用
一、线程的状态原创 2020-06-18 20:00:44 · 326 阅读 · 0 评论
分享