java中使用锁的两个基本工具是 synchronized 和 Lock。
一.synchronized
1.synchronized既可以同步方法也可以同步代码块
// 同步的方法
pubilc synchronized void test() {
}
//同步代码块上
public void test() {
synchronized(obj) {
System.out.println("===");
}
}
2.synchronized 用在方法和代码块上有什么区别
synchronized 用在方法名上,当某个线程调用此方法时,会获取该实例的对象锁,方法未结束之前,其他线程只能去等待。当这个方法执行完时,才会释放对象锁。其他线程才有机会去抢占这把锁,去执行方法test,但是发生这一切的基础应当是所有线程使用的同一个对象实例,才能实现互斥的现象。否则synchronized关键字将失去意义。
但是如果该方法为类方法,即其修饰符为static,那么synchronized 意味着某个调用此方法的线程当前会拥有该类的锁,只要该线程持续在当前方法内运行,其他线程依然无法获得方法的使用权!
synchro