我得到兩個線程固定數量,遂以100個任務,裏面我困惑的Java線程池和ReentrantLock的
使用的鎖,故意離開它解鎖,運行這段代碼的結果是
排序號碼從1到99,這讓我感到困惑:
1)是否因爲線程被重用,以便同一個線程可以多次獲取它?
2)如果是這樣,鎖不阻塞線程,它仍然可以重用?鎖守只是其範圍內的界限。
請糾正我。
public class LockTest {
public static volatile int a = 1;
static final ReentrantLock lock = new ReentrantLock();
public static void main(String[] args) {
ExecutorService executorService = Executors.newFixedThreadPool(2);
for (int k = 0; k < 100; k++) {
executorService.submit(new Runnable() {
@Override
public void run() {
lock.lock();
System.out.println(a++);
}
});
}
executorService.shutdown();
}
}
爲什麼沒有解鎖呼叫?永不解鎖的鎖的要點是什麼? –
@ Sidias-Korrado是的,我讓它解鎖,我只是想弄清楚它是如何工作的 –
你讓它鎖定,不解鎖。 –