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);
}
@Override
public void run() {
for (int k = 0; k < 1000000; k++) {
lock.lock(); //加锁
lock.lock(); //第二次加锁
i++;
lock.unlock(); //解锁
lock.unlock(); //第二次解锁
}
}
}