分类目录归档:Java

junit用法


junit用法,before,beforeClass,after, afterClass的执行顺序

1 beforeClass 2 before 3 after 4 afterClass (注意1,4 static的方法,切在单元测试中只执行一次 2,3 在每次test运行的时候都会执行)

Read more

Java对象内存分布


Java对象内存分布

1.6 synchronize 锁升级过程?和之前的版本有什么区别?是否可逆?

偏向锁,轻量级锁,重量级锁

synchronize 首先是无锁状态,当有竞争的时候,先检查Markword中的线程id 是否存储线程id, 没有的话就设置线程id,执行同步代码块,有的话cas操作,成功的话就执行同步代码块, 失败的话就进入到轻量级锁过程。

升级轻量级锁的时候 ,会发生 stop the word,然后将原先持有偏向锁的线程升级成轻量级锁,然后在 cas 操作,成功执行同步代码块,失败进行自旋,自旋达到一定次数之后还没有执行的话,就升级成重量级锁。

偏向锁:标志位 01 ,

Read more

Spring 事务中哪几种事务传播行为?


支持当前事务的情况:

TransactionDefinition.PROPAGATION_REQUIRED: 如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。 TransactionDefinition.PROPAGATION_SUPPORTS: 如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。 TransactionDefinition.PROPAGATION_MANDATORY: 如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。(mandatory:强制性)

不支持当前事务的情况:

TransactionDefinition.

Read more

Java 并发编程 读书笔记


并发编程

三个核心问题

  • 互斥

    • 无锁

      • 不变模式
      • 线程本地存储(不共享变量 Thread Local)
      • CAS
      • Copy-On-Write
      • 原子类
    • 互斥锁

      • synchronized
      • Lock

        • 优化读多写少

          • ReadWriteLock
          • StampedLock
      • 读写锁

  • 协作

    • 信号量(Semaphore)
    • 管程(Monitor)

      • Lock & Condition
      • synchronized
    • CountDownLatch

    • CyclicBarrier
    • Phaser
    • Exchanger
  • 分工

    • Executer 与线程池
    • fork/Join
    • Future

Read more