日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java lock接口_Java Lock接口

發布時間:2023/12/9 java 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java lock接口_Java Lock接口 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java Lock接口

java.util.concurrent.locks.Lock接口用作線程同步機制,類似于同步塊。新的鎖定機制更靈活,提供比同步塊更多的選項。 鎖和同步塊之間的主要區別如下:

序列的保證 - 同步塊不提供對等待線程進行訪問的序列的任何保證,但Lock接口處理它。

無超時,如果未授予鎖,則同步塊沒有超時選項。Lock接口提供了這樣的選項。

單一方法同步塊必須完全包含在單個方法中,而Lock接口的方法lock()和unlock()可以以不同的方式調用。

1 Lock接口的方法

以下是Lock類中可用的重要方法的列表。

方法

描述

public void lock()

獲得鎖

public void lockInterruptibly()

獲取鎖定,除非當前線程中斷

public Condition newCondition()

返回綁定到此Lock實例的新Condition實例

public boolean tryLock()

只有在調用時才可以獲得鎖

public boolean tryLock(long time, TimeUnit unit)

如果在給定的等待時間內自由,并且當前線程未被中斷,則獲取該鎖。

public void unlock()

釋放鎖

2?Lock接口的案例

以下TestThread程序演示了使用Lock接口的一些方法。 這里我們使用lock()獲取鎖和unlock()來釋放鎖。

package com.yiidian;

/**

* 一點教程網: http://www.yiidian.com

*/

import java.util.concurrent.locks.Lock;

import java.util.concurrent.locks.ReentrantLock;

class PrintDemo {

private final Lock queueLock = new ReentrantLock();

public void print() {

queueLock.lock();

try {

Long duration = (long) (Math.random() * 10000);

System.out.println(Thread.currentThread().getName()

+ " Time Taken " + (duration / 1000) + " seconds.");

Thread.sleep(duration);

} catch (InterruptedException e) {

e.printStackTrace();

} finally {

System.out.printf("%s printed the document successfully.\n", Thread.currentThread().getName());

queueLock.unlock();

}

}

}

class ThreadDemo extends Thread {

PrintDemo printDemo;

ThreadDemo( String name, PrintDemo printDemo) {

super(name);

this.printDemo = printDemo;

}

@Override

public void run() {

System.out.printf("%s starts printing a document\n", Thread.currentThread().getName());

printDemo.print();

}

}

public class TestThread {

public static void main(String args[]) {

PrintDemo PD = new PrintDemo();

ThreadDemo t1 = new ThreadDemo( "Thread - 1 ", PD );

ThreadDemo t2 = new ThreadDemo( "Thread - 2 ", PD );

ThreadDemo t3 = new ThreadDemo( "Thread - 3 ", PD );

ThreadDemo t4 = new ThreadDemo( "Thread - 4 ", PD );

t1.start();

t2.start();

t3.start();

t4.start();

}

}

輸出結果為:

Thread - 1 starts printing a document

Thread - 4 starts printing a document

Thread - 3 starts printing a document

Thread - 2 starts printing a document

Thread - 1 Time Taken 4 seconds.

Thread - 1 printed the document successfully.

Thread - 4 Time Taken 3 seconds.

Thread - 4 printed the document successfully.

Thread - 3 Time Taken 5 seconds.

Thread - 3 printed the document successfully.

Thread - 2 Time Taken 4 seconds.

Thread - 2 printed the document successfully.

在上面的示例中,使用ReentrantLock類作為Lock接口的一個實現。 ReentrantLock類允許線程鎖定方法,即使它已經具有其他方法鎖。

總結

以上是生活随笔為你收集整理的java lock接口_Java Lock接口的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。