AQS(二)

1. Semaphore 是什么?

  Semaphore 字面意思是信号量的意思,它的作用是控制访问特定资源的线程数目。
   2. 怎么使用 Semaphore?
         2.1 构造方法 
         public Semaphore(int permits) 
         public Semaphore(int permits, boolean fair)
                permits 表示许可线程的数量 
                fair 表示公平性,如果这个设为 true 的话,下次执行的线程会是等待最久的线 程 
            2.2 重要方法
             public void acquire() throws InterruptedException 
            public void release() 
            tryAcquire(long timeout, TimeUnit unit)
                    acquire() 表示阻塞并获取许可
                     release() 表示释放许可 
             2.3 基本使用 
                  2.3.1 需求场景 资源访问,服务限流。
                   2.3.2 代码实现
public class SemaphoreSample {
     public static void main(String[] args) {
        Semaphore semaphore = new Semaphore(2); 
           for (int i=0;i<5;i++){ 
            new Thread(new Task(semaphore,"yangguo+"+i)).start(); 
            }
             }
             static class Task extends Thread{
                Semaphore semaphore;
              public Task(Semaphore semaphore,String tname){ 
              this.semaphore = semaphore; 
              this.setName(tname); 
              }
              public void run() {
               try {
                  semaphore.acquire(); 
                  System.out.println(Thread.currentThread().getName()+":aquire() at 
                  time:"+System.currentTimeMillis()); Thread.sleep(1000); semaphore.release(); 
                  System.out.println(Thread.currentThread().getName()+":aquire() at       
                   time:"+System.currentTimeMillis());
                   } catch (InterruptedException e) { 
                   e.printStackTrace(); 
                   }
                    } } }

线程抢夺锁的代码如下
在这里插入图片描述

当有多个线程时,抢不到的进行入队操作
在这里插入图片描述
此时只用修改state,就代表抢到锁,不像Reentrent Lock还需要修改线程ID,原因是因为Semaphooer是共享锁,Reentrent Lock是独占锁。
================================================ =================
在插入队列之前,会检测要插入节点前面的节点是否有效,如果无效将其剔除,一直循环到前面的节点是有效的,代码如下
在这里插入图片描述

线程的唤醒:
在这里插入图片描述

CountDownLatch使用及应用场景例子

 CountDownLatch是什么?
   CountDownLatch这个类能够使一个线程等待其他线程完成各自的工作后再执行。例 如,应用程序的主线程希望在负责启动框架服务的线程已经启动所有的框架服务之后再执行

CountDownLatch如何工作?
   CountDownLatch是通过一个计数器来实现的,计数器的初始值为线程的数量。每当 一个线程完成了自己的任务后,计数器的值就会减1。当计数器值到达0时,它表示所有的 线程已经完成了任务,然后在闭锁上等待的线程就可以恢复执行任务。

API
CountDownLatch.countDown()
CountDownLatch.await();

CountDownLatch应用场景例子

比如陪媳妇去看病。 医院里边排队的人很多,如果一个人的话,要先看大夫,看完大夫再去排队交钱取药。 现在我们是双核,可以同时做这两个事(多线程)。 假设看大夫花3秒钟,排队交费取药花5秒钟。我们同时搞的话,5秒钟我们就能完成,然后 一起回家(回到主线程)。

CyclicBarrier

栅栏屏障,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程 到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续运行。
CyclicBarrier默认的构造方法是CyclicBarrier(int parties),其参数表示屏障拦截的线 程数量,每个线程调用await方法告CyclicBarrier我已经到达了屏障,然后当前线程被阻塞。

 API
  cyclicBarrier.await();

应用场景
可以用于多线程计算数据,最后合并计算结果的场景。例如,用一个Excel保存了用户 所有银行流水,每个Sheet保存一个账户近一年的每笔银行流水,现在需要统计用户的日均 银行流水,先用多线程处理每个sheet里的银行流水,都执行完之后,得到每个sheet的日
均银行流水,最后,再用barrierAction用这些线程的计算结果,计算出整个Excel的日 均银行流水

主要内容:本文详细介绍了一种QRBiLSTM(分位数回归双向长短期记忆网络)的时间序列区间预测方法。首先介绍了项目背景以及模型的优势,比如能够有效利用双向的信息,并对未来的趋势上限和下限做出估计。接着从数据生成出发讲述了具体的代码操作过程:数据预处理,搭建模型,进行训练,并最终可视化预测结果与计算分位数回归的边界线。提供的示例代码可以完全运行并且包含了数据生成环节,便于新手快速上手,深入学习。此外还指出了模型未来发展的方向,例如加入额外的输入特性和改善超参数配置等途径提高模型的表现。文中强调了时间序列的标准化和平稳检验,在样本划分阶段需要按时间序列顺序进行划分,并在训练阶段采取合适的手段预防过度拟合发生。 适合人群:对于希望学习和应用双向长短时记忆网络解决时序数据预测的初学者和具有一定基础的研究人员。尤其适用于有金融数据分析需求、需要做多一步或多步预测任务的从业者。 使用场景及目标:应用于金融市场波动预报、天气状况变化预测或是物流管理等多个领域内的决策支持。主要目的在于不仅能够提供精确的数值预计还能描绘出相应的区间概率图以增强结论置信程度。 补充说明:本教程通过一个由正弦信号加白噪构造而成的简单实例来指导大家理解和执行QRBiLSTM流程的所有关键步骤,这既方便于初学者跟踪学习,又有利于专业人士作为现有系统的补充参考工具。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值