Victor's Code Journey
Victor's Code Journey

Java并发之Future

未完待续
持续更新中…

Future 是 Java 中的一个接口,用于表示异步计算的结果。它可以在多线程环境下执行异步操作,并在需要时获取其结果。在本文中,我们将详细介绍 Future 任务机制和 FutureTask 的实现原理及使用方法。

Java并发之Lock简介

通过查看Lock的源码可知,Lock是一个接口:

public interface Lock {
    void lock();
    void lockInterruptibly() throws InterruptedException;
    boolean tryLock();
    boolean tryLock(long time, TimeUnit unit) throws InterruptedException;
    void unlock();
    Condition newCondition();
}

lock()、tryLock()、tryLock(long time, TimeUnit unit)和lockInterruptibly()是用来获取锁的。unLock()方法是用来释放锁的。

mysql索引

mysql的索引可以分为几类:

  • 聚集索引和非聚集索引
  • 唯一索引和普通索引
  • 单列索引和组合索引
  • 全文索引(仅MyISAM支持)
  • 空间索引(仅MyISAM支持)

Java并发之ThreadLocal

ThreadLocal类提供的以下几个方法:

// 用来获取ThreadLocal在当前线程中保存的变量副本
public T get()
// 用来设置当前线程中变量的副本
public void set(T value)
// 用来移除当前线程中变量的副本
public void remove()
// 用来在使用时进行重写的
protected T initialValue()

Java并发之volatile关键字

Java语言提供了一种稍弱的同步机制,即volatile变量,用来确保将变量的更新操作通知到其他线程。当把变量声明为volatile类型后,编译器与运行时都会注意到这个变量是共享的,因此不会将该变量上的操作与其他内存操作一起重排序。volatile变量不会被缓存在寄存器或者对其他处理器不可见的地方,因此在读取volatile类型的变量时总会返回最新写入的值。

Java并发之线程安全

编写线程安全的代码,核心在于对状态访问操作进行管理,特别是共享的和可变的状态的访问。

  • 共享意味着变量可以由多个线程进行访问;
  • 可变意味着变量的值在其生命周期内可变化

当有多个线程访问同一个可变的状态变量时,没有使用合适的同步,那么程序就会出现错误,有3种方法可以修复这个问题:

  • 不在线程之间共享状态变量
  • 将状态变量修改为不可变的变量
  • 在访问状态变量时使用同步

数据结构-数组

数组是使用最广泛的基础数据结构。数组是存放在连续内存空间上的相同类型数据的集合,可以方便的通过数字索引的方式获取到索引所对应的数据。需要注意的是数组的索引都是从0开始计算的。下图就是长度为3的字符数组的例子。

内存地址100110021003
数组元素‘a’‘b’‘c’
数组索引012

假设一个数组,其元素按照值的固定顺序排序(升序或降序),那么这种数组被称为有序数组。在实际的算法使用中常常会对数组先进行排序,然后在进行处理。