CFSDN nhấn mạnh vào giá trị tạo ra nguồn mở và chúng tôi cam kết xây dựng nền tảng chia sẻ tài nguyên để mọi nhân viên CNTT có thể tìm thấy thế giới tuyệt vời của bạn tại đây.
Bài viết trên blog CFSDN này có giải thích chi tiết cách sử dụng giao diện Java Future, được tác giả sưu tầm và biên soạn. Nếu bạn quan tâm đến bài viết này thì nhớ like nhé.
Giải thích chi tiết cách sử dụng giao diện java Future.
Trong Java, nếu bạn cần đặt thời gian tối đa để thực thi mã, tức là hết thời gian chờ, bạn có thể sử dụng lớp ExecutorService của nhóm luồng Java kết hợp với giao diện Tương lai để đạt được điều này. Giao diện Tương lai là một phần của API tiêu chuẩn Java và được tìm thấy trong gói java.util.concurrent. Giao diện Tương lai là một triển khai của chế độ Tương lai của luồng Java và có thể được sử dụng để tính toán không đồng bộ. Mẫu Tương lai có thể được mô tả như thế này: Tôi có một nhiệm vụ và gửi nó cho Tương lai, và Tương lai sẽ hoàn thành nhiệm vụ đó cho tôi. Trong thời gian này tôi có thể làm bất cứ điều gì tôi muốn. Sau một thời gian, tôi có thể nhận được kết quả từ Future. Nó tương đương với việc đặt hàng. Sau một thời gian, bạn có thể nhận hàng theo đơn đặt hàng. Trong thời gian này, bạn có thể làm bất cứ điều gì khác. Giao diện Tương lai là mẫu đơn đặt hàng và lớp Executor thực sự xử lý đơn hàng sẽ tạo ra các sản phẩm theo yêu cầu của giao diện Tương lai. Giao diện Tương lai cung cấp các phương thức để phát hiện xem tác vụ đã được thực thi hay chưa, chờ tác vụ được thực thi để nhận kết quả và bạn cũng có thể đặt thời gian chờ để thực hiện tác vụ. Phương pháp thiết lập thời gian chờ này là chìa khóa để hiện thực hóa thời gian chờ thực thi chương trình Java.
Giao diện Future là giao diện chung. Định dạng nghiêm ngặt phải là Future, trong đó V đại diện cho loại giá trị trả về của tác vụ được thực hiện bởi Future. Các phương thức của giao diện Future được giới thiệu như sau:
- boolean cancel (boolean mayInterruptIfRunning) Hủy việc thực thi tác vụ. Tham số này chỉ định xem có nên ngừng thực hiện tác vụ ngay lập tức hay đợi cho đến khi tác vụ kết thúc.
- boolean isCancelled () Cho dù tác vụ đã bị hủy hay chưa. Nếu tác vụ bị hủy trước khi hoàn thành bình thường, nó sẽ trả về true.
- boolean isDone () Liệu tác vụ đã được hoàn thành hay chưa. Cần lưu ý rằng nếu tác vụ được kết thúc bình thường, bất thường hoặc bị hủy, nó sẽ trả về true.
- V get() ném ra ngoại lệ InterruptedException, ExecutionException đợi quá trình thực thi tác vụ kết thúc rồi thu được kết quả kiểu V. Chuỗi InterruptedException bị gián đoạn ngoại lệ, ngoại lệ thực thi tác vụ ExecutionException, nếu tác vụ bị hủy, CancellationException cũng sẽ bị ném
- V get (thời gian chờ dài, đơn vị TimeUnit) ném InterruptedException, ExecutionException, TimeoutException Tương tự như hàm get ở trên, có thêm cài đặt thời gian chờ. Tham số hết thời gian chỉ định thời gian chờ và uint chỉ định đơn vị thời gian. Có các định nghĩa liên quan trong lớp liệt kê TimeUnit. Nếu quá trình tính toán hết thời gian, TimeoutException sẽ được ném ra
Các lớp triển khai của Future bao gồm java.util.concurrent.FutureTask hoặc javax.swing.SwingWorker. FutureTask thường được sử dụng để xử lý các công việc của chúng ta. Lớp FutureTask cũng triển khai giao diện Runnable, do đó nó có thể được gửi trực tiếp tới Executor để thực thi. Mã sử dụng FutureTask để triển khai thực thi thời gian chờ như sau:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
ExecutorService executor = Executors.newSingleThreadExecutor();
FutureTask tương lai =
mới
FutureTask(
mới
Có thể gọi() {
công cộng
Gọi chuỗi() {
}});
executor.execute(tương lai);
thử
{
kết quả = future.get(
5000
, Đơn vị thời gian.MILLISECONDS);
}
nắm lấy
(Ngoại lệ bị ngắt e) {
futureTask. hủy bỏ(
ĐÚNG VẬY
);
}
nắm lấy
(ExecutionException e) {
futureTask. hủy bỏ(
ĐÚNG VẬY
);
}
nắm lấy
(TimeoutException e) {
futureTask. hủy bỏ(
ĐÚNG VẬY
);
}
Cuối cùng
{
executor.tắt máy();
}
|
。
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
ExecutorService executor = Executors.newSingleThreadExecutor();
FutureTask tương lai =
mới
FutureTask(
mới
Có thể gọi() {
công cộng
Gọi chuỗi() {
}});
executor.execute(tương lai);
thử
{
kết quả = future.get(
5000
, Đơn vị thời gian.MILLISECONDS);
}
nắm lấy
(Ngoại lệ bị ngắt e) {
futureTask. hủy bỏ(
ĐÚNG VẬY
);
}
nắm lấy
(ExecutionException e) {
futureTask. hủy bỏ(
ĐÚNG VẬY
);
}
nắm lấy
(TimeoutException e) {
futureTask. hủy bỏ(
ĐÚNG VẬY
);
}
Cuối cùng
{
executor.tắt máy();
}
|
Không cần trực tiếp xây dựng đối tượng Future, bạn cũng có thể sử dụng phương thức ExecutorService.submit để lấy đối tượng Future. Phương thức submit hỗ trợ cả loại giao diện Callable và giao diện Runnable làm tham số, có tính linh hoạt cao. Ví dụ sử dụng như sau:
?
1
2
3
4
5
6
7
8
|
ExecutorService executor = Executors.newSingleThreadExecutor();
FutureTask tương lai = người thực thi.gửi(
mới
Có thể gọi() {
công cộng
Gọi chuỗi() {
}});
|
。
?
1
2
3
4
5
6
7
8
|
ExecutorService executor = Executors.newSingleThreadExecutor();
FutureTask tương lai = người thực thi.gửi(
mới
Có thể gọi() {
công cộng
Gọi chuỗi() {
}});
|
Có rất nhiều cách để sử dụng giao diện Future để triển khai thời gian chờ thực hiện chương trình. Chúng ta cần nghiên cứu cách triển khai nội bộ của giao diện Future vào một ngày khác, đặc biệt là việc triển khai cài đặt thời gian chờ thực hiện.
Cảm ơn bạn đã đọc, tôi hy vọng điều này sẽ giúp ích cho mọi người và cảm ơn bạn đã ủng hộ trang web này! .
Cuối cùng, bài viết giải thích chi tiết về việc sử dụng giao diện java Future kết thúc tại đây. Nếu bạn muốn biết thêm về giải thích chi tiết về việc sử dụng giao diện java Future, vui lòng tìm kiếm các bài viết của CFSDN hoặc tiếp tục duyệt qua các bài viết liên quan. Tôi hy vọng bạn sẽ hỗ trợ tôi trong tương lai blog! .
Tôi là một lập trình viên xuất sắc, rất giỏi!