JDK提供了大量实用的API和框架,来支持JDK内部功能:
- 介绍更多多线程控制方法,比如之前的synchronized;
- 介绍JDK中对线程池的支持,提高线程调度性能;
- 向大家介绍JDK的一些并发容器。
1 多线程的团队协作:同步控制
- synchronized 的功能扩展:重入锁
- 使用java.util.concurrent.locks.ReentrantLock 类来实现 ;
- 需手动指定何时加锁,何时释放锁;
- 注意:必须记得释放锁,否则其他线程就没有机会访问临界区了;
- 为什么叫重入锁:一个线程可以连续两次获得同意不锁,当然,释放时也需要释放两次;
public class ReentLock implements Runnable{public static ReentrantLock lock = new ReentrantLock();public static int i = 0;public static void main(String[] args) throws InterruptedException {ReentLock r= new ReentLock();Thread t1 = new Thread(r);Thread t2 = new Thread(r);t1.start();t2.start();t1.join(); //主线程愿意等到该线程执行完再执行t2.join();System.out.println(i);}@Overridepublic void run() {for (int k = 0; k < 1000000; k++) {lock.lock(); //加锁lock.lock(); //第二次加锁i++;lock.unlock(); //解锁lock.unlock(); //第二次解锁}}
}