九又四分之三站台

0%

核心思想:把比key小的数放在左边,比key大的放在右边。

一个数字一个坑,最开始a[i]赋值给key,所以i这个位置就空出来了,从后往前查询查到a[j] < key, 把i这个位置用a[j]填充,这时候j这个位置就空出来了,接着从前往后查询,查到a[i]>key, 这时候就可以把a[i]这个值填充到j这个位置,直到跳出循环。

因为是先从后往前查询并且用了 >= 和 <=, 所以跳出循环后得到i==j并且i位置空出, 这时候就可以把key填入i位置,得到的数组i左边的全是比key小的数,i右边都是比key大的数,这样分割成两组分别排序

阅读全文 »

Java中有各式各样的锁,大致可以分为以下几类

  • 公平锁 / 非公平锁
  • 可重入锁
  • 互斥锁 / 共享锁
  • 乐观锁 / 悲观锁
  • 分段锁
  • 偏向锁 / 轻量级锁 / 重量级锁
  • 自旋锁
阅读全文 »

Java 通过 ThreadPoolExecutor 提供的3个submit()方法和FutureTask来获取多线程任务结果

ThreadPoolExecutor

3个submit()方法如下

阅读全文 »

在多线程中线程的执行是CPU随机调度的,无法指定线程的执行顺序,比如我们要让多线程按顺序执行输出

阅读全文 »

ThreadLocal是一个关于创建线程局部变量的类。

通常情况下,我们创建的变量是可以被任何一个线程访问并修改的。而使用ThreadLocal创建的变量只能被当前线程访问,其他线程则无法访问和修改。

ThreadLocal支持泛型,创建跟一般类一样new一个对象就可以了。创建完对象后就可以用set方法设置值

阅读全文 »

代理模式

代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

首先来了解以下什么是代理模式

先来一个hello接口

1
2
3
4
public interface Hello {

void sayHello(String name);
}
阅读全文 »