Java并发之Unsafe
本文介绍了 Java 并发编程中依赖的 Unsafe操作。
本文介绍了 Java 并发编程中依赖的 Unsafe操作。
优化mysql查询语句,通常使用explain命令,下面是个例子:
mysql> explain select * from servers;
+----+-------------+---------+------+---------------+------+---------+------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+---------+------+---------------+------+---------+------+------+-------+
| 1 | SIMPLE | servers | ALL | NULL | NULL | NULL | NULL | 1 | NULL |
+----+-------------+---------+------+---------------+------+---------+------+------+-------+
1 row in set (0.03 sec)expain出来的信息有10列,分别是id、select_type、table、type、possible_keys、key、key_len、ref、rows、Extra。
Future 是 Java 中的一个接口,用于表示异步计算的结果。它可以在多线程环境下执行异步操作,并在需要时获取其结果。在本文中,我们将详细介绍 Future 任务机制和 FutureTask 的实现原理及使用方法。
通过查看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的索引可以分为几类:
ThreadLocal类提供的以下几个方法:
// 用来获取ThreadLocal在当前线程中保存的变量副本
public T get()
// 用来设置当前线程中变量的副本
public void set(T value)
// 用来移除当前线程中变量的副本
public void remove()
// 用来在使用时进行重写的
protected T initialValue()synchronized 是Java中的关键字,作用是实现线程间的同步。synchronized 会对要同步的代码加锁,每次只会有一个线程进入同步代码块,从而保证线程安全。
Java语言提供了一种稍弱的同步机制,即volatile变量,用来确保将变量的更新操作通知到其他线程。当把变量声明为volatile类型后,编译器与运行时都会注意到这个变量是共享的,因此不会将该变量上的操作与其他内存操作一起重排序。volatile变量不会被缓存在寄存器或者对其他处理器不可见的地方,因此在读取volatile类型的变量时总会返回最新写入的值。
编写线程安全的代码,核心在于对状态访问操作进行管理,特别是共享的和可变的状态的访问。
当有多个线程访问同一个可变的状态变量时,没有使用合适的同步,那么程序就会出现错误,有3种方法可以修复这个问题:
本文介绍基于数组的常用排序算法.