2022.09.06 学习笔记

本文探讨了SQL中的字符串处理函数如len()、substring()、left()和right(),以及timestampdiff()用于计算时间差。同时,深入解析了Java内存模型中volatile和锁的内存语义,包括它们在读写时如何影响内存和线程可见性。通过对比,展示了volatile在并发控制中的角色与锁的相似性。
摘要由CSDN通过智能技术生成

SQL

  • len(@strname) :查询字符串的长度

  • substring(@strname,startindex,length):截取字符串长度

  • left(@strname,length):左边截取length字符

  • right(@strname,length):右边截取length字符

  • timestampdiff(second|minute…,date1,date2) 获取两个date间的差异,第一个参数是单位

    select * from issue_scan order by timestampdiff(second,start_time,end_time) desc;
    
  • 返回的结果表按 percentage降序 排序,若相同则按 contest_id升序 排序

    对于此类需求order by进行先后拼接即可

    select contest_id,round(count(*)/(select count(*) from Users)*100 ,2)percentage
    from Users u,Register r
    where u.user_id=r.user_id
    group by contest_id
    order by percentage desc ,contest_id
    

volatile读写内存语义

  • 当写一个volatile变量时,JMM会把线程对应的本地内存中的共享变量值刷新到主内存
  • 当读一个volatile变量时,JMM会把该线程对应的本地内存置为无效,接着从主内存中读取共享变量

锁的内存语义

  • 当线程释放锁时,JMM会把该线程对应的本地内存中的共享变量刷新到主内存中
  • 当线程获取锁时,JMM会把该线程对应的本地内存置为无效,从而使得被监视器保护的临界区代码必须从主内存中读取共享变量

final域

  • 写final域的重排序规则可以确保:在对象引用为任意线程可见之前,对象的final域已经被初始化了
  • 读final域的重排序规则可以确保:在读一个对象的final域之前,一定会先读包含这个final域的对象的引用
  • 在构造函数内对一个final引用的对象的成员域的写入,与随后在构造函数外把这个被构造对象的引用赋值给一个引用变量

volatile的写-读和锁的释放-获取具有相同的内存语义

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值