You are on page 1of 126

Trang 1

Trang 2
Khen ngợi trước cho
Thực hành đồng thời Java
Tôi đã may mắn thực sự đã làm việc với một đội ngũ tuyệt vời về thiết kế và
triển khai các tính năng tương tranh được thêm vào nền tảng Java trong Java 5.0
và Java 6. Bây giờ cùng nhóm này cung cấp giải thích tốt nhất về những cái mới này
tính năng và đồng thời nói chung. Đồng thời không còn là chủ đề cho
chỉ người dùng nâng cao. Mọi nhà phát triển Java nên đọc cuốn sách này.
Giáo sư
JDK đồng thời Czar, Sun microsystems
Trong 30 năm qua, hiệu suất máy tính đã được thúc đẩy bởi Định luật Moore;
kể từ bây giờ, nó sẽ được thúc đẩy bởi Luật của Amdahl. Viết mã hiệu quả
khai thác nhiều bộ xử lý có thể rất khó khăn. Thực hành đồng thời Java
cung cấp cho bạn các khái niệm và kỹ thuật cần thiết để viết an toàn và có thể mở rộng
Các chương trình Java cho các hệ thống ngày hôm nay và ngày mai.
Giáo sư Rajor Rajwan
Nhà khoa học nghiên cứu, Intel Corp
Đây là cuốn sách bạn cần nếu bạn đang viết, hoặc thiết kế, hoặc gỡ lỗi, hoặc chính
Làm mưa làm gió, hoặc suy ngẫm về các chương trình Java đa luồng. Nếu bạn đã từng phải
đồng bộ hóa một phương thức và bạn không chắc tại sao, bạn nợ nó và chính bạn
Người dùng đọc cuốn sách này, che để che.
NewTed Neward
Tác giả của Java doanh nghiệp hiệu quả
Brian giải quyết các vấn đề cơ bản và phức tạp của đồng thời với
sự rõ ràng không phổ biến. Cuốn sách này là phải đọc cho bất cứ ai sử dụng chủ đề và
quan tâm đến hiệu suất.
PepperKirk Pepperdine
CTO, JavaPerformanceTuning.com
Cuốn sách này bao gồm một chủ đề rất sâu sắc và tinh tế một cách rất rõ ràng và súc tích,
làm cho nó trở thành hướng dẫn tham khảo đồng thời Java hoàn hảo. Mỗi trang được điền
với các vấn đề (và giải pháp!) mà các lập trình viên phải vật lộn với mỗi ngày.
Khai thác hiệu quả đồng thời ngày càng trở nên quan trọng
rằng Luật của Moore đang cung cấp nhiều lõi hơn nhưng không phải là lõi nhanh hơn và cuốn sách này sẽ
chỉ cho bạn cách làm
Giáo hoàng Vách đá
Kỹ sư phần mềm cao cấp, Azul Systems

Trang 3
Tôi rất quan tâm đến đồng thời và có lẽ đã viết nhiều chủ đề hơn
bế tắc và mắc lỗi đồng bộ hóa nhiều hơn hầu hết các lập trình viên.
Cuốn sách của Brian là dễ đọc nhất về chủ đề xâu chuỗi và đồng thời trong
Java và giải quyết vấn đề khó khăn này bằng cách tiếp cận thực hành tuyệt vời.
Đây là một cuốn sách tôi muốn giới thiệu cho tất cả các độc giả của tôi về Chuyên gia Java '
Bản tin, bởi vì nó thú vị, hữu ích và liên quan đến các vấn đề phải đối mặt
Các nhà phát triển Java ngày nay.
Giáo hoàng Heinz Kabutz
Bản tin của các chuyên gia Java
Tôi đã tập trung sự nghiệp vào việc đơn giản hóa các vấn đề đơn giản, nhưng cuốn sách này đầy tham
vọng
và hoạt động hiệu quả để đơn giản hóa một chủ đề phức tạp nhưng quan trọng: đồng thời. Java
Đồng thời trong thực tiễn là cách mạng trong cách tiếp cận của nó, trơn tru và dễ dàng trong phong cách,
và kịp thời trong quá trình giao hàng của nó, nó được coi là một cuốn sách rất quan trọng.
TateBruce Tate
Tác giả của Beyond Java
Java đồng thời trong thực tiễn là một phần tổng hợp vô giá của bí quyết phân luồng
cho các nhà phát triển Java. Tôi thấy việc đọc cuốn sách này rất thú vị về mặt trí tuệ, một phần là
bởi vì nó là một giới thiệu tuyệt vời về API đồng thời của Java, nhưng chủ yếu là vì
nó nắm bắt một cách thấu đáo và dễ tiếp cận kiến thức chuyên môn về luồng
dễ dàng tìm thấy ở nơi khác
Venners
Tác giả của Inside Virtual Machine

Trang 4
Thực hành đồng thời Java

Trang 5
Trang này cố ý để trống

Trang 6
Thực hành đồng thời Java
Brian Goetz
với
Tim Peierls
Joshua Bloch
Joseph Bowbeer
David Holmes
và Doug Lea
Thượng Yên River, NJ • Boston • Indianapolis • San Francisco
New York • Toronto • Montreal • Luân Đôn • Munich • Paris • Madrid
Capetown • Sydney • Tokyo • Singapore • Thành phố Mexico

Trang 7
Nhiều chỉ định được sử dụng bởi các nhà sản xuất và người bán để phân biệt sản phẩm của họ được tuyên
bố là thương mại
điểm. Trường hợp các chỉ định đó xuất hiện trong cuốn sách này và nhà xuất bản đã biết về khiếu nại
nhãn hiệu,
chỉ định đã được in bằng chữ in hoa ban đầu hoặc trong tất cả các chữ viết hoa.
Các tác giả và nhà xuất bản đã quan tâm đến việc chuẩn bị cuốn sách này, nhưng không bày tỏ hay ngụ ý
bảo hành dưới mọi hình thức và không chịu trách nhiệm cho các lỗi hoặc thiếu sót. Không có trách nhiệm
pháp lý cho sự cố
hoặc hậu quả thiệt hại liên quan đến hoặc phát sinh từ việc sử dụng thông tin hoặc chương trình có trong
ở đây
Nhà xuất bản cung cấp giảm giá tuyệt vời cho cuốn sách này khi đặt hàng với số lượng lớn để mua số
lượng lớn hoặc đặc biệt
bán hàng, có thể bao gồm các phiên bản điện tử và / hoặc bìa tùy chỉnh và nội dung cụ thể cho doanh
nghiệp của bạn,
mục tiêu đào tạo, tập trung tiếp thị và lợi ích thương hiệu. Vui lòng liên lạc để biết thêm thông tin:
Bán hàng doanh nghiệp và chính phủ Hoa Kỳ
(800) 382-3419
corpsales@pearsontechgroup.com
Để bán hàng bên ngoài Hoa Kỳ, vui lòng liên hệ:
Doanh số bán hàng quốc tế
quốc tế@pearsoned.com
Ghé thăm chúng tôi trên Web : www.awprof Profession.com
Cuốn sách này được kích hoạt Safari
Biểu tượng bật Safari® trên bìa của cuốn sách công nghệ yêu thích của bạn có nghĩa là cuốn sách này
có sẵn thông qua Tủ sách Safari. Khi bạn mua cuốn sách này, bạn có thể truy cập trực tuyến miễn phí
phiên bản trong 45 ngày.
Safari Bookshelf là một thư viện tham khảo điện tử cho phép bạn dễ dàng tìm kiếm hàng ngàn cuốn sách
kỹ thuật, tìm
mẫu mã, tải các chương và truy cập thông tin kỹ thuật bất cứ khi nào và bất cứ nơi nào bạn cần.
Để có được quyền truy cập Safari trong 45 ngày vào cuốn sách này:
• Truy cập http: //www.awprof Profession.com/safarienables
• Hoàn thành mẫu đăng ký ngắn gọn
• Nhập mã phiếu giảm giá UUIR-XRJG-JWWF-AHGM-137Z
Nếu bạn gặp khó khăn khi đăng ký trên Safari Bookshelf hoặc truy cập phiên bản trực tuyến, vui lòng gửi
email cho khách hàng
vice@safaribooksonline.com.
Dữ liệu Biên mục của Thư viện Quốc hội
Goetz, Brian.
Đồng thời Java trong thực tiễn / Brian Goetz, với Tim Peierls. . . [et al.]
tr. cm.
Bao gồm tài liệu tham khảo và chỉ mục.
ISBN 0-321-34960-1 (pbk .: Giấy kiềm)
1. Java (Ngôn ngữ chương trình máy tính) 2. Lập trình song song (Khoa học máy tính) 3. Chủ đề (Máy
tính
chương trình) I. Tiêu đề.
QA76.73.J38G588 2006
005.13'3 - dc22
2006012205
Bản quyền © 2006 Pearson Education, Inc.
In ấn
Ngày 13
Văn bản được in ở Hoa Kỳ trên giấy tái chế tại Courier Stoughton ở Stoughton, Massachusetts.
Mã số 0-321-34960-1

Trang 8
Gửi Jessica

Trang 9
Trang này cố ý để trống

Trang 10
Nội dung
Danh sách
xii
Lời nói đầu
xvii
1. Giới thiệu
1
1.1 Một lịch sử ngắn gọn (rất) đồng thời. . . . . . . . . . . . . . . . . . .
1
1.2 Lợi ích của chủ đề. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
1.3 Rủi ro của chủ đề. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
1.4 Chủ đề ở khắp mọi nơi. . . . . . . . . . . . . . . . . . . . . . . . . .
9
Tôi cơ bản
13
An toàn 2 luồng
15
2.1 An toàn chủ đề là gì? . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.2 Nguyên tử. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.3 Khóa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.4 Trạng thái bảo vệ có khóa. . . . . . . . . . . . . . . . . . . . . . . . . 27
2.5 Sức sống và hiệu suất. . . . . . . . . . . . . . . . . . . . . . . . . 29
3 đối tượng chia sẻ
33
3.1 Tầm nhìn. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.2 Xuất bản và thoát. . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.3 Chủ đề bị giam cầm. . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.4 Bất biến. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
3.5 Xuất bản an toàn. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4 Đối tượng sáng tác
55
4.1 Thiết kế một lớp an toàn chủ đề. . . . . . . . . . . . . . . . . . . . . . . 55
4.2 Giam giữ sơ thẩm. . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
4.3 Phân luồng an toàn. . . . . . . . . . . . . . . . . . . . . . . . . . 62
4.4 Thêm chức năng cho các lớp an toàn luồng hiện có. . . . . . . . . . 71
4.5 Tài liệu chính sách đồng bộ hóa. . . . . . . . . . . . . . . . . . 74
ix

Trang 11
x
Nội dung
5 khối xây dựng
79
5.1 Bộ sưu tập được đồng bộ hóa. . . . . . . . . . . . . . . . . . . . . . . . . . 79
5.2 Bộ sưu tập đồng thời. . . . . . . . . . . . . . . . . . . . . . . . . . . 84
5.3 Chặn hàng đợi và mô hình nhà sản xuất-người tiêu dùng. . . . . . . . . 87
5.4 Phương pháp chặn và gián đoạn. . . . . . . . . . . . . . . . . . . 92
5.5 Đồng bộ hóa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
5.6 Xây dựng bộ đệm kết quả hiệu quả, có thể mở rộng. . . . . . . . . . . . . . . . 101
II Cấu trúc các ứng dụng đồng thời
111
6 thực thi nhiệm vụ
113
6.1 Thực hiện các nhiệm vụ trong các chủ đề.  . . . . . . . . . . . . . . . . . . . . . . . . 113
6.2 Khung thực thi . . . . . . . . . . . . . . . . . . . . . . . . . 117
6.3 Tìm song song có thể khai thác. . . . . . . . . . . . . . . . . . . . . . 123
7 Hủy và Tắt máy
135
7.1 Hủy bỏ nhiệm vụ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
7.2 Dừng dịch vụ dựa trên luồng. . . . . . . . . . . . . . . . . . . . . 150
7.3 Xử lý chấm dứt luồng bất thường. . . . . . . . . . . . . . . . . 161
7.4 Tắt JVM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
8 Áp dụng Hồ bơi Chủ đề
167
8.1 Khớp nối ngầm giữa các tác vụ và chính sách thực thi. . . . . . . 167
8.2 Định cỡ hồ bơi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
8.3 Cấu hình ThreadPoolExecutor . . . . . . . . . . . . . . . . . . . . 171
8.4 Mở rộng ThreadPoolExecutor . . . . . . . . . . . . . . . . . . . . . 179
8,5 Song song thuật toán đệ quy. . . . . . . . . . . . . . . . . . . . 181
9 ứng dụng GUI
189
9.1 Tại sao GUI đơn luồng? . . . . . . . . . . . . . . . . . . . . . . 189
9.2 Các tác vụ GUI chạy ngắn. . . . . . . . . . . . . . . . . . . . . . . . . . 192
9.3 Các tác vụ GUI chạy dài. . . . . . . . . . . . . . . . . . . . . . . . . . 195
9.4 Mô hình dữ liệu được chia sẻ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
9.5 Các dạng khác của hệ thống con đơn luồng. . . . . . . . . . . . . . . 202
III Độ bền, hiệu suất và thử nghiệm
203
10 Tránh các mối nguy hiểm sinh động
205
10.1 Bế tắc. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
10.2 Tránh và chẩn đoán bế tắc. . . . . . . . . . . . . . . . . . . 215
10.3 Các mối nguy hiểm khác. . . . . . . . . . . . . . . . . . . . . . . . . . . 218
11 Hiệu suất và khả năng mở rộng
221
11.1 Suy nghĩ về hiệu suất. . . . . . . . . . . . . . . . . . . . . . . 221
11.2 Luật của Amdahl. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
11.3 Chi phí được giới thiệu bởi các chủ đề. . . . . . . . . . . . . . . . . . . . . . . . 229
11.4 Giảm tranh chấp khóa. . . . . . . . . . . . . . . . . . . . . . . . . 232

Trang 12
Nội dung
xi
11,5 Ví dụ: So sánh hiệu suất Bản đồ . . . . . . . . . . . . . . . . . 242
11.6 Giảm chi phí chuyển đổi ngữ cảnh. . . . . . . . . . . . . . . . . . . . 243
12 Chương trình thử nghiệm đồng thời
247
12.1 Kiểm tra tính chính xác. . . . . . . . . . . . . . . . . . . . . . . . . . . 248
12.2 Kiểm tra hiệu suất. . . . . . . . . . . . . . . . . . . . . . . . . . 260
12.3 Tránh các cạm bẫy kiểm tra hiệu suất. . . . . . . . . . . . . . . . . . 266
12.4 Phương pháp thử nghiệm bổ sung. . . . . . . . . . . . . . . . . . . 270
IV Chủ đề nâng cao
275
13 Khóa rõ ràng
277
13.1 Khóa và ReentrantLock . . . . . . . . . . . . . . . . . . . . . . . . . . 277
13.2 Cân nhắc hiệu suất. . . . . . . . . . . . . . . . . . . . . . . . 282
13.3 Công bằng. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
13.4 Lựa chọn giữa đồng bộ hóa và ReentrantLock . . . . . . . . . 285
13,5 Khóa đọc-ghi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
14 Tòa nhà đồng bộ hóa tùy chỉnh
29
14.1 Quản lý sự phụ thuộc nhà nước. . . . . . . . . . . . . . . . . . . . . . . . 29
14.2 Sử dụng hàng đợi điều kiện. . . . . . . . . . . . . . . . . . . . . . . . . . 298
14.3 Đối tượng điều kiện rõ ràng. . . . . . . . . . . . . . . . . . . . . . . . . . 306
14.4 Cấu tạo của bộ đồng bộ. . . . . . . . . . . . . . . . . . . . . . . . 308
14,5 Tóm tắtQueuedSyn Syncizer . . . . . . . . . . . . . . . . . . . . . . 311
14.6 AQS trong các lớp đồng bộ hóa java.util.conc hiện . . . . . . . . . 314
15 Biến nguyên tử và đồng bộ hóa không chặn
319
15.1 Nhược điểm của khóa. . . . . . . . . . . . . . . . . . . . . . . . . 319
15.2 Hỗ trợ phần cứng cho đồng thời. . . . . . . . . . . . . . . . . . . . 321
15.3 Các lớp biến nguyên tử. . . . . . . . . . . . . . . . . . . . . . . . . . . 324
15.4 Thuật toán không chặn. . . . . . . . . . . . . . . . . . . . . . . . . . 329
16 Mô hình bộ nhớ Java
337
16.1 Mô hình bộ nhớ là gì và tại sao tôi muốn có một mô hình? . . . . . . . . 337
16.2 Xuất bản. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
16.3 Khởi tạo an toàn. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
Chú thích cho đồng thời
353
A.1 Chú thích lớp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
A.2 Chú thích trường và phương pháp. . . . . . . . . . . . . . . . . . . . . . . 353
Thư mục
355
Mục lục
359

Trang 13
Danh sách
1
Cách xấu để sắp xếp một danh sách. Đừng làm điều này. . . . . . . . . . . . . . . . . . . . xix
2
Ít hơn cách tối ưu để sắp xếp một danh sách. . . . . . . . . . . . . . . . . . . . xx
1.1
Trình tạo trình tự không an toàn. . . . . . . . . . . . . . . . . . .
6
1.2
Trình tạo chuỗi an toàn. . . . . . . . . . . . . . . . . . . . . .
7
2.1
Một người hầu không quốc tịch. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.2
Servlet đếm các yêu cầu mà không cần đồng bộ hóa cần thiết
sự. Đừng làm điều này. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.3
Điều kiện cuộc đua trong khởi tạo lười biếng. Đừng làm điều này. . . . . . . . . . . 21
2.4
Servlet đếm các yêu cầu sử dụng AtomicLong . . . . . . . . . . . . . 23
2,5
Servlet cố gắng lưu trữ kết quả cuối cùng của nó mà không đầy đủ
nguyên tử. Đừng làm điều này. . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.6
Servlet lưu trữ kết quả cuối cùng, nhưng với kết quả kém không thể chấp nhận được
tiền tệ. Đừng làm điều này. . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.7
Mã sẽ bế tắc nếu khóa nội tại không được cấp lại. . . . 27
2,8
Servlet lưu trữ yêu cầu và kết quả cuối cùng của nó. . . . . . . . . . . . . . 31
3,1
Chia sẻ các biến mà không đồng bộ hóa. Đừng làm điều này. . . . . . . 34
3.2
Người giữ số nguyên có thể thay đổi không an toàn. . . . . . . . . . . . . . . . . 36
3,3
Chủ sở hữu số nguyên biến đổi an toàn. . . . . . . . . . . . . . . . . . . . 36
3,4
Đếm cừu. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3,5
Xuất bản một đối tượng. . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
3.6
Cho phép trạng thái đột biến nội bộ để thoát ra. Đừng làm điều này. . . . . . . . 40
3.7
Ngẫu nhiên cho phép các tài liệu tham khảo này để thoát. Đừng làm điều này. . . . 41
3,8
Sử dụng phương pháp nhà máy để ngăn tham chiếu này thoát khỏi
ing trong quá trình thi công. . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.9
Chủ đề của các biến nguyên thủy và tham chiếu cục bộ. . . . 44
3.10 Sử dụng ThreadLocal để đảm bảo giam cầm luồng. . . . . . . . . . . 45
3.11 Lớp bất biến được xây dựng từ các đối tượng cơ bản có thể thay đổi. . . . . . . 47
3.12 Người giữ bất biến để lưu trữ một số và các yếu tố của nó. . . . . . . . 49
3.13 Lưu trữ kết quả cuối cùng bằng cách sử dụng tham chiếu dễ bay hơi đến bất biến
đối tượng giữ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
3.14 Xuất bản một đối tượng mà không đồng bộ hóa đầy đủ. Đừng làm
điều này. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
3.15 Lớp có nguy cơ thất bại nếu không được công bố đúng. . . . . . . . . . . . 51
4.1
Bộ đếm an toàn luồng đơn giản sử dụng mẫu màn hình Java. . . . . . 56
4.2
Sử dụng giam cầm để đảm bảo an toàn chủ đề. . . . . . . . . . . . . . . 59
4.3
Nhà nước bảo vệ với một khóa riêng. . . . . . . . . . . . . . . . . . . . 61
xii

Trang 14
Danh sách
xiii
4,4
Giám sát thực hiện theo dõi xe. . . . . . . . . . . . . 63
4,5
Lớp điểm có thể thay đổi tương tự như java.awt.Point . . . . . . . . . . . . . 64
4.6
Lớp điểm bất biến được sử dụng bởi DelegatingVehicleTracker . . . . . 64
4,7
Ủy quyền an toàn của chủ đề cho Bản đồ đồng thời . . . . . . . . . . . 65
4,8
Trả lại một bản sao tĩnh của vị trí được đặt thay vì một bản sống trực tiếp. . 66
4,9
Ủy thác an toàn chủ đề cho nhiều biến trạng thái cơ bản. . . 66
4.10 Lớp phạm vi số không đủ bảo vệ invari-
kiến. Đừng làm điều này. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
4.11 Lớp điểm đột biến an toàn chủ đề. . . . . . . . . . . . . . . . . . . . . . 69
4.12 Trình theo dõi xe công bố trạng thái cơ bản một cách an toàn. . . . . . . . . 70
4.13 Mở rộng Vector để có phương thức put-if-vắng mặt. . . . . . . . . . . 72
4.14 Nỗ lực phi an toàn để thực hiện put-if-vắng mặt. Đừng làm điều này. . 72
4.15 Thực hiện put-if-vắng mặt với khóa phía máy khách. . . . . . . . . . 73
4.16 Thực hiện put-if-vắng mặt bằng cách sử dụng thành phần. . . . . . . . . . . . . 74
5.1
Hành động tổng hợp trên một Vector có thể tạo ra kết quả khó hiểu. 80
5,2
Hành động hợp chất trên Vector bằng cách sử dụng khóa phía máy khách. . . . . . . . 81
5,3
Lặp đi lặp lại có thể ném ArrayIndexOutOfBoundException . . . . . 81
5,4
Lặp lại với khóa phía khách hàng. . . . . . . . . . . . . . . . . . . . . 82
5,5
Lặp lại một danh sách với một Iterator . . . . . . . . . . . . . . . . . . . . 82
5,6
Lặp lại ẩn trong nối chuỗi. Đừng làm điều này. . . . . . 84
5,7
Giao diện đồng thời . . . . . . . . . . . . . . . . . . . . . . . . . . 87
5,8
Nhiệm vụ của nhà sản xuất và người tiêu dùng trong một ứng dụng tìm kiếm trên máy tính để bàn. . . . 91
5,9
Bắt đầu tìm kiếm máy tính để bàn. . . . . . . . . . . . . . . . . . . . . . . . 92
5.10 Khôi phục trạng thái bị gián đoạn để không nuốt phải ngắt. 94
5.11 Sử dụng CountDownLatch để bắt đầu và dừng các luồng trong thời gian
xét nghiệm. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
5.12 Sử dụng FutureTask để tải trước dữ liệu cần thiết sau này. . . . . . . . 97
5.13 Buộc một kiểm soát Throwable đến một RuntimeException . . . . . . 98
5.14 Sử dụng Semaphore để ràng buộc một bộ sưu tập. . . . . . . . . . . . . . . . . 100
5.15 Phối hợp tính toán trong máy tự động di động với Cyclic-
Rào chắn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
5.16 Nỗ lực bộ đệm ban đầu bằng cách sử dụng HashMap và đồng bộ hóa. . . . . . . 103
5.17 Thay thế HashMap bằng ConcảnHashMap . . . . . . . . . . . . . . 105
5.18 Trình bao bọc ghi nhớ bằng FutureTask . . . . . . . . . . . . . . . . . 106
5.19 Thực hiện cuối cùng của Trình ghi nhớ . . . . . . . . . . . . . . . . . . . . 108
5.20 Factorizing servlet lưu trữ kết quả bằng cách sử dụng Trình ghi nhớ . . . . . . . . . 109
6.1
Máy chủ web tuần tự. . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
6.2
Máy chủ web bắt đầu một chủ đề mới cho mỗi yêu cầu. . . . . . . . . . 115
6,3
Giao diện điều hành . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
6,4
Máy chủ web sử dụng một nhóm luồng. . . . . . . . . . . . . . . . . . . . . . 118
6,5
Executor bắt đầu một chủ đề mới cho mỗi nhiệm vụ. . . . . . . . . . . . 118
6,6
Executor thực thi các nhiệm vụ một cách đồng bộ trong luồng gọi. . 119
6,7
Các phương thức vòng đời trong ExecutorService . . . . . . . . . . . . . . . . . 121
6,8
Máy chủ web có hỗ trợ tắt máy. . . . . . . . . . . . . . . . . . . 122
6,9
Lớp minh họa hành vi Timer khó hiểu . . . . . . . . . . . . . . . 124
6.10 Kết xuất các phần tử trang theo tuần tự. . . . . . . . . . . . . . . . . . 125
6.11 Callable và tương lai giao diện. . . . . . . . . . . . . . . . . . . . . . 126

Trang 15
xiv
Danh sách
6.12 Triển khai mặc định newTaskFor trong ThreadPoolExecutor . . . 126
6.13 Đang chờ tải xuống hình ảnh với Tương lai . . . . . . . . . . . . . . . . 128
6.14 Lớp QueueingFuture được sử dụng bởi ExecutorCompletionService . . . . . 129
6.15 Sử dụng CompleteionService để hiển thị các thành phần trang như chúng-
đến sẵn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
6.16 Tìm nạp quảng cáo với ngân sách thời gian. . . . . . . . . . . . . 132
6.17 Yêu cầu báo giá du lịch theo ngân sách thời gian. . . . . . . . . . . . . 134
7.1
Sử dụng một trường biến động để giữ trạng thái hủy bỏ. . . . . . . . . . . . 137
7.2
Tạo số nguyên tố có giá trị thứ hai. . . . . . . . . . . . 137
7.3
Hủy bỏ không đáng tin cậy có thể khiến các nhà sản xuất bị mắc kẹt trong một khối-
hoạt động ing. Đừng làm điều này. . . . . . . . . . . . . . . . . . . . . . . . . 139
7.4
Phương pháp gián đoạn trong chủ đề . . . . . . . . . . . . . . . . . . . . . . 139
7,5
Sử dụng gián đoạn để hủy bỏ. . . . . . . . . . . . . . . . . . . . 141
7.6
Tuyên truyền bị gián đoạn Ngoại lệ cho người gọi. . . . . . . . . . . . . 143
7,7
Nhiệm vụ không thể phục hồi mà phục hồi sự gián đoạn trước khi thoát. . . . . . . 144
7,8
Lập lịch trình ngắt trên một chủ đề mượn. Đừng làm điều này. . . . . 145
7,9
Làm gián đoạn một nhiệm vụ trong một chủ đề chuyên dụng. . . . . . . . . . . . . . . . 146
7.10 Hủy tác vụ bằng Tương lai . . . . . . . . . . . . . . . . . . . . . . 147
7.11 Đóng gói hủy bỏ không đạt tiêu chuẩn trong một Chủ đề bằng cách ghi đè
ngắt quãng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
7.12 Đóng gói hủy bỏ không chuẩn trong một tác vụ với newTaskFor . 151
7.13 Dịch vụ ghi nhật ký của nhà sản xuất và người tiêu dùng không hỗ trợ tắt máy. . . 152
7.14 Cách không đáng tin cậy để thêm hỗ trợ tắt máy cho dịch vụ ghi nhật ký. . . 153
7.15 Thêm hủy bỏ đáng tin cậy vào LogWriter . . . . . . . . . . . . . . . . 154
7.16 Dịch vụ ghi nhật ký sử dụng ExecutorService . . . . . . . . . . . . . 155
7.17 Tắt máy bằng thuốc độc. . . . . . . . . . . . . . . . . . . . . . . . . 156
7.18 Chủ đề của nhà sản xuất cho IndexingService . . . . . . . . . . . . . . . . . . 157
7.19 Chủ đề của người tiêu dùng cho IndexingService . . . . . . . . . . . . . . . . . 157
7.20 Sử dụng một Executor riêng có tuổi thọ bị giới hạn bởi một phương thức
gọi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
7.21 ExecutorService theo dõi các tác vụ bị hủy sau khi tắt máy.159
7.22 Sử dụng TrackExecutorService để lưu các tác vụ chưa hoàn thành cho lần sau
chấp hành. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
7.23 Cấu trúc ren công nhân hồ bơi điển hình. . . . . . . . . . . . . . 162
7.24 Giao diện UncaughtExceptionHandler . . . . . . . . . . . . . . . . . . 163
7.25 UncaughtExceptionHandler ghi lại ngoại lệ. . . . . . . . . . 163
7.26 Đăng ký móc tắt máy để dừng dịch vụ ghi nhật ký. . . . . . . 165
8.1
Nhiệm vụ bế tắc trong một Executor đơn luồng . Đừng làm điều này. . . 169
8.2
Trình xây dựng chung cho ThreadPoolExecutor . . . . . . . . . . . . . . 172
8.3
Tạo nhóm luồng có kích thước cố định với hàng đợi giới hạn và
chính sách bão hòa người gọi. . . . . . . . . . . . . . . . . . . . . . . . 175
8.4
Sử dụng một Semaphore để điều tiết nhiệm vụ. . . . . . . . . . . . . 176
8,5
Giao diện ThreadFactory . . . . . . . . . . . . . . . . . . . . . . . . . . 176
8,6
Nhà máy chủ đề tùy chỉnh. . . . . . . . . . . . . . . . . . . . . . . . . . . 177
8,7
Lớp cơ sở chủ đề tùy chỉnh. . . . . . . . . . . . . . . . . . . . . . . . . 178
8,8
Sửa đổi một Executor được tạo ra với các nhà máy tiêu chuẩn. . . . . 179
8,9
Nhóm chủ đề mở rộng với đăng nhập và thời gian. . . . . . . . . . . . 180

Trang 16
Danh sách
xv
8.10 Chuyển đổi thực hiện tuần tự thành thực hiện song song. . . . . . 181
8.11 Chuyển đổi đệ quy đuôi liên tiếp thành đệ quy song song. . 182
8.12 Chờ kết quả được tính song song. . . . . . . . . . . . . 182
8.13 Trừu tượng cho các câu đố như các khối trượt câu đố. . . . . . . . 183
8.14 Nút liên kết cho khung giải câu đố. . . . . . . . . . . . . . . 184
8.15 Người giải câu đố tuần tự. . . . . . . . . . . . . . . . . . . . . . . . . . 185
8.16 Phiên bản đồng thời của bộ giải câu đố. . . . . . . . . . . . . . . . . . . 186
8.17 Chốt mang kết quả được sử dụng bởi ConcurrencyPuheadsSolver . . . . . . . . 187
8.18 Bộ giải nhận ra khi không có giải pháp tồn tại. . . . . . . . . . . . . 188
9,1
Thực hiện SwingUtilities bằng cách sử dụng Executor . . . . . . . . . . 193
9,2
Giám đốc điều hành được xây dựng trên đỉnh SwingUtilities . . . . . . . . . . . . . . . . . . . 194
9,3
Người nghe sự kiện đơn giản. . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
9,4
Liên kết một nhiệm vụ dài hạn với một thành phần trực quan. . . . . . . . . . 196
9,5
Nhiệm vụ lâu dài với phản hồi của người dùng. . . . . . . . . . . . . . . . . . 196
9,6
Hủy bỏ một nhiệm vụ dài hạn. . . . . . . . . . . . . . . . . . . . . . 197
9,7
Lớp nhiệm vụ nền hỗ trợ hủy bỏ, hoàn thành thông báo
cation, và thông báo tiến độ. . . . . . . . . . . . . . . . . . . . . 199
9,8
Bắt đầu một tác vụ có thể hủy bỏ trong thời gian dài với BackgroundTask . . 200
10.1 Bế tắc khóa đơn giản. Đừng làm điều này. . . . . . . . . . . . . . 207
10.2 Bế tắc khóa động. Đừng làm điều này. . . . . . . . . . . . . 208
10.3 Tạo ra một trật tự khóa để tránh bế tắc. . . . . . . . . . . . . . . 209
10,4 Vòng lặp trình điều khiển gây ra bế tắc trong các điều kiện điển hình. . . . . 210
10.5 Bế tắc trật tự khóa giữa các đối tượng hợp tác. Đừng làm điều này. 212
10.6 Sử dụng các cuộc gọi mở để tránh bế tắc giữa các đối tượng hợp tác. 214
10.7 Phần của bãi chứa ren sau khi bế tắc. . . . . . . . . . . . . . . . . 217
11.1 Truy cập nối tiếp vào hàng đợi nhiệm vụ. . . . . . . . . . . . . . . . . . . . . 227
11.2 Đồng bộ hóa không có hiệu lực. Đừng làm điều này. . . . . . . . . . . . 230
11.3 Ứng cử viên cho cuộc bầu cử khóa. . . . . . . . . . . . . . . . . . . . . . . . . 231
11.4 Giữ khóa lâu hơn cần thiết. . . . . . . . . . . . . . . . . . 233
11,5 Giảm thời gian khóa. . . . . . . . . . . . . . . . . . . . . . . . . . 234
11.6 Ứng cử viên cho tách khóa. . . . . . . . . . . . . . . . . . . . . . . . 236
11.7 ServerStatus được cấu trúc lại để sử dụng khóa chia. . . . . . . . . . . . . . . 236
11.8 Bản đồ dựa trên Hash sử dụng phân chia khóa. . . . . . . . . . . . . . . . . . . 238
12.1 Bộ đệm giới hạn sử dụng Semaphore . . . . . . . . . . . . . . . . . . . . . 249
12.2 Kiểm tra đơn vị cơ bản cho BoundedBuffer . . . . . . . . . . . . . . . . . . . . 250
12.3 Kiểm tra chặn và đáp ứng với gián đoạn. . . . . . . . . . 252
12.4 Bộ tạo số ngẫu nhiên chất lượng trung bình phù hợp để thử nghiệm. . . 253
12.5 Chương trình thử nghiệm của nhà sản xuất-người tiêu dùng cho BoundedBuffer . . . . . . . . . 255
12.6 Các lớp sản xuất và tiêu dùng được sử dụng trong PutTakeTest . . . . . . . . . 256
12.7 Kiểm tra rò rỉ tài nguyên. . . . . . . . . . . . . . . . . . . . . . . . . 258
12.8 Nhà máy luồng để thử nghiệm ThreadPoolExecutor . . . . . . . . . . . . 258
12.9 Phương pháp thử để xác minh mở rộng nhóm luồng. . . . . . . . . . . . . . 259
12.10 Sử dụng Thread.yield để tạo thêm xen kẽ. . . . . . . . . . 260
12.11 Rào chắn dựa trên rào cản. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
12.12 Thử nghiệm với bộ đếm thời gian dựa trên rào cản. . . . . . . . . . . . . . . . . . . . 262
12.13 Chương trình điều khiển cho TimedPutTakeTest . . . . . . . . . . . . . . . . . 262
13.1 Giao diện khóa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277

Trang 17
xvi
Danh sách
13.2 Bảo vệ trạng thái đối tượng bằng ReentrantLock . . . . . . . . . . . . . . . 278
13.3 Tránh bế tắc khóa bằng cách sử dụng tryLock . . . . . . . . . . . . 280
13.4 Khóa với ngân sách thời gian. . . . . . . . . . . . . . . . . . . . . . . . 281
13,5 Mua lại khóa gián đoạn. . . . . . . . . . . . . . . . . . . . . . . 281
13.6 Giao diện ReadWriteLock . . . . . . . . . . . . . . . . . . . . . . . . . . 286
13.7 Bao bọc bản đồ bằng khóa đọc ghi. . . . . . . . . . . . . . . . . 288
14.1 Cấu trúc ngăn chặn các hành động phụ thuộc vào nhà nước. . . . . . . . . . . . . . 292
14.2 Lớp cơ sở để thực hiện bộ đệm giới hạn. . . . . . . . . . . . . 293
14.3 Bộ đệm giới hạn chùn bước khi điều kiện tiên quyết không được đáp ứng. . . . . . 294
14.4 Logic máy khách để gọi GrumpyBoundedBuffer . . . . . . . . . . . . . . 294
14,5 Bộ đệm giới hạn sử dụng chặn thô. . . . . . . . . . . . . . . . . . 296
14.6 Bộ đệm giới hạn sử dụng hàng đợi điều kiện. . . . . . . . . . . . . . . . . 298
14.7 Hình thức Canonical cho các phương pháp phụ thuộc vào nhà nước. . . . . . . . . . . . . . 301
14.8 Sử dụng thông báo có điều kiện trong BoundedBuffer.put . . . . . . . . . 304
14,9 cổng Recloseable sử dụng chờ đợi và notifyAll . . . . . . . . . . . . . . . 304
14.10 Giao diện điều kiện . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
14.11 Bộ đệm giới hạn sử dụng các biến điều kiện rõ ràng. . . . . . . . . . . 309
14.12 Đếm semaphore được thực hiện bằng Khóa . . . . . . . . . . . . . 310
14.13 Các hình thức Canonical để mua lại và phát hành trong AQS. . . . . . . . . . 312
14,14 Chốt nhị phân bằng cách sử dụng Tóm tắt Tóm tắt . . . . . . . . . . . 313
14.15 Thực hiện tryAcquire từ nonfair ReentrantLock . . . . . . 315
14.16 tryAcquireShared và tryReleaseShared từ Semaphore . . . . . 316
15.1 Thao tác CAS mô phỏng. . . . . . . . . . . . . . . . . . . . . . . . . 322
15.2 Bộ đếm không chặn sử dụng CAS. . . . . . . . . . . . . . . . . . . . . 323
15.3 Bảo toàn bất biến đa biến bằng CAS. . . . . . . . . . . . . 327
15.4 Trình tạo số ngẫu nhiên bằng ReentrantLock . . . . . . . . . . . 327
15,5 Trình tạo số ngẫu nhiên bằng cách sử dụng AtomicInteger . . . . . . . . . . . 327
15.6 Ngăn xếp không chặn bằng thuật toán Treiber (Treiber, 1986). . . . . 331
15.7 Chèn trong thuật toán xếp hàng không chặn Michael-Scott
(Michael và Scott, 1996) ... . . . . . . . . . . . . . . . . . . . . . . . 334
15.8 Sử dụng các trình cập nhật trường nguyên tử trong ConcurrencyLinkedQueue . . . . . . . 335
16.1 Chương trình được đồng bộ hóa không đầy đủ có thể gây ngạc nhiên
tội lỗi. Đừng làm điều này. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
16.2 Lớp bên trong của FutureTask minh họa đồng bộ hóa piggybacking.343
16.3 Khởi tạo lười biếng không an toàn. Đừng làm điều này. . . . . . . . . . . . . . . . . . 345
16.4 Khởi tạo lười biếng an toàn theo chủ đề. . . . . . . . . . . . . . . . . . . . . . . 347
16.5 Khởi tạo háo hức. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
16.6 Thành ngữ chủ sở hữu khởi tạo lười biếng. . . . . . . . . . . . . . . . . . 348
16.7 Antipotype khóa kiểm tra hai lần. Đừng làm điều này. . . . . . . . . . . 349
16.8 Khởi tạo an toàn cho các đối tượng bất biến. . . . . . . . . . . . . . . . 350

Trang 18
Lời nói đầu
Tại bài viết này, bộ xử lý đa lõi giờ đã trở nên đủ rẻ
cho các hệ thống máy tính để bàn tầm trung. Không phải ngẫu nhiên, nhiều nhóm phát triển
nhận thấy ngày càng nhiều báo cáo lỗi liên quan đến luồng trong các dự án của họ. Gần đây
bài đăng trên trang web của nhà phát triển NetBeans, một trong những người duy trì cốt lõi quan sát thấy
rằng
một lớp duy nhất đã được vá hơn 14 lần để khắc phục các sự cố liên quan đến luồng.
Dion Almaer, cựu biên tập viên của TheServerSide, gần đây đã viết blog (sau một cơn đau
phiên gỡ lỗi cuối cùng đã tiết lộ một lỗi luồng) mà hầu hết Java cung cấp
gram rất đầy rẫy những lỗi đồng thời đến mức chúng chỉ hoạt động một cách tình cờ.
Thật vậy, phát triển, thử nghiệm và gỡ lỗi các chương trình đa luồng có thể là
vô cùng khó khăn vì các lỗi đồng thời không tự biểu hiện trước
đáng sợ Và khi chúng nổi lên, thường là vào thời điểm tồi tệ nhất có thể trong
sản xuất, dưới tải nặng.
Một trong những thách thức của việc phát triển các chương trình đồng thời trong Java là sự sai lầm
phù hợp giữa các tính năng tương tranh được cung cấp bởi nền tảng và cách thức
Velopers cần phải suy nghĩ về đồng thời trong các chương trình của họ. Ngôn ngữ
vide cơ chế cấp thấp như đồng bộ hóa và chờ điều kiện, nhưng những cơ chế này
các cơ chế phải được sử dụng nhất quán để thực hiện các giao thức cấp ứng dụng
hoặc chính sách . Không có các chính sách như vậy, thật dễ dàng để tạo ra các chương trình
đống và xuất hiện để làm việc nhưng vẫn bị phá vỡ. Nhiều người xuất sắc
sách về đồng thời không đạt được mục tiêu của họ bằng cách tập trung quá mức vào cấp độ thấp
các cơ chế và API hơn là các chính sách và mẫu ở cấp thiết kế.
Java 5.0 là một bước tiến lớn để phát triển ứng dụng đồng thời-
Tions trong Java, cung cấp các thành phần cấp cao mới và cấp thấp bổ sung
các cơ chế giúp người mới và các chuyên gia dễ dàng hơn trong việc xây dựng đồng thời
các ứng dụng. Các tác giả là thành viên chính của Nhóm chuyên gia JCP
đã tạo ra các cơ sở này; ngoài việc mô tả hành vi và tính năng của họ,
chúng tôi trình bày các mẫu thiết kế cơ bản và các kịch bản sử dụng dự đoán
thúc đẩy sự bao gồm của họ trong các thư viện nền tảng.
Mục tiêu của chúng tôi là cung cấp cho độc giả một bộ quy tắc thiết kế và mô hình tinh thần tạo nên
nó dễ dàng hơn và vui hơn nữa để xây dựng các lớp đồng thời chính xác, hiệu quả và
các chỉ dẫn trong Java.
Chúng tôi hy vọng bạn thích Java đồng thời trong thực tiễn .
Brian Goetz
Williston, VT
Tháng 3 năm 2006
xvii

Trang 19
xviii
Lời nói đầu
Làm thế nào để sử dụng cuốn sách này
Để giải quyết sự không phù hợp trừu tượng giữa các cơ chế cấp thấp của Java và
các chính sách cấp thiết kế cần thiết, chúng tôi trình bày một bộ quy tắc đơn giản để viết
chương trình đồng thời. Các chuyên gia có thể xem xét các quy tắc này và nói rằng Hmm Hmm, đó là
không hoàn toàn đúng: lớp C là thread-safe mặc dù nó vi phạm quy tắc R “Trong khi.
có thể viết các chương trình chính xác phá vỡ các quy tắc của chúng tôi, làm như vậy đòi hỏi một
hiểu sâu sắc về các chi tiết cấp thấp của Mô hình bộ nhớ Java và chúng tôi
muốn các nhà phát triển có thể viết các chương trình đồng thời chính xác mà không cần phải có
để làm chủ những chi tiết này Luôn tuân theo các quy tắc đơn giản hóa của chúng tôi sẽ tạo ra
chương trình đồng thời chính xác và duy trì.
Chúng tôi cho rằng người đọc đã có một số quen thuộc với mecha cơ bản-
các chủ nghĩa đồng thời trong Java. Java đồng thời trong thực tế không phải là một giới thiệu
để tương tranh với điều đó, hãy xem chương phân luồng của bất kỳ lời giới thiệu đàng hoàng nào
âm lượng, chẳng hạn như Ngôn ngữ lập trình Java (Arnold et al., 2005). Cũng không phải là nó
một tài liệu tham khảo bách khoa toàn thư cho All Things concurrency, cho điều đó, xem Đồng thời
Lập trình bằng Java (Lea, 2000). Thay vào đó, nó cung cấp các quy tắc thiết kế thực tế để hỗ trợ
Các nhà phát triển trong quá trình khó khăn để tạo ra đồng thời an toàn và hiệu quả
các lớp học. Khi thích hợp, chúng tôi tham khảo chéo các phần có liên quan của The Java Pro-
Ngôn ngữ ngữ pháp , Lập trình đồng thời trong Java , Đặc tả ngôn ngữ Java
(Gosling et al., 2005) và Java hiệu quả (Bloch, 2001) bằng cách sử dụng các quy ước [JPL
nm], [CPJ nm], [JLS nm] và [Mục EJ n].
Sau phần giới thiệu (Chương 1), cuốn sách được chia thành bốn phần:
Nguyên tắc cơ bản. Phần I (Chương 2-5) tập trung vào các khái niệm cơ bản của con-
an toàn tiền tệ và luồng, và cách kết hợp các lớp an toàn luồng ra khỏi
khối xây dựng đồng thời được cung cấp bởi thư viện lớp. Một tờ cheat gian lận
kích thước quan trọng nhất của các quy tắc được trình bày trong Phần I xuất hiện trên trang 110.
Chương 2 (An toàn chủ đề) và 3 (Đối tượng chia sẻ) tạo thành nền tảng cho
quyển sách. Gần như tất cả các quy tắc về tránh các mối nguy tương tranh, xây dựng
các lớp an toàn luồng và xác minh an toàn luồng đang ở đây. Độc giả thích
Thực hành của người dân từ người đến người khác có thể được khuyến khích bỏ qua phần II, nhưng hãy
chắc chắn rằng
quay lại và đọc Chương 2 và 3 trước khi viết bất kỳ mã đồng thời nào!
Chương 4 (Đối tượng soạn thảo) bao gồm các kỹ thuật để soạn thảo an toàn cho luồng
các lớp thành các lớp an toàn luồng lớn hơn. Chương 5 (Khối xây dựng) bao gồm
khối xây dựng đồng thời Bộ sưu tập và đồng bộ hóa an toàn theo chủ đề
bởi các thư viện nền tảng.
Cấu trúc các ứng dụng đồng thời. Phần II (Chương 6-9) mô tả cách thức
để khai thác các luồng để cải thiện thông lượng hoặc đáp ứng của ap- đồng thời
lời đề nghị. Chương 6 (Thực thi nhiệm vụ) bao gồm việc xác định các nhiệm vụ song song và
thực hiện chúng trong khuôn khổ thực thi nhiệm vụ. Chương 7 (Hủy bỏ
và Shutdown) liên quan đến các kỹ thuật để thuyết phục các nhiệm vụ và chủ đề cho ter-
khai thác trước khi họ thường làm như vậy; làm thế nào các chương trình đối phó với hủy bỏ
và tắt máy thường là một trong những yếu tố phân tách đồng thời thực sự mạnh mẽ
các ứng dụng từ những người chỉ đơn thuần làm việc. Chương 8 (Áp dụng nhóm chủ đề)
giải quyết một số tính năng nâng cao của khung thực thi tác vụ.
Trang 20
Lời nói đầu
xix
Chương 9 (Ứng dụng GUI) tập trung vào các kỹ thuật để cải thiện khả năng phản hồi
trong các hệ thống con đơn luồng.
Sống động, hiệu suất và thử nghiệm. Phần III (Chương 10-12) liên quan đến chính nó
với việc đảm bảo rằng các chương trình đồng thời thực sự làm những gì bạn muốn chúng làm
và làm như vậy với hiệu suất chấp nhận được. Chương 10 (Tránh các mối nguy hiểm sinh động)
mô tả cách tránh những thất bại sinh động có thể ngăn chương trình thực hiện
tiến tiến. Chương 11 (Hiệu suất và khả năng mở rộng) bao gồm các kỹ thuật
để cải thiện hiệu suất và khả năng mở rộng của mã đồng thời. Chương 12
(Kiểm tra chương trình đồng thời) bao gồm các kỹ thuật để kiểm tra mã đồng thời cho
cả tính chính xác và hiệu suất.
Chủ đê nâng cao. Phần IV (Chương 13-16) bao gồm các chủ đề có khả năng
chỉ được quan tâm cho các nhà phát triển có kinh nghiệm: khóa rõ ràng, biến nguyên tử,
thuật toán không chặn, và phát triển đồng bộ hóa tùy chỉnh.
Mã ví dụ
Mặc dù nhiều khái niệm chung trong cuốn sách này có thể áp dụng cho các phiên bản của Java
trước Java 5.0 và thậm chí với các môi trường không phải Java, hầu hết các ví dụ mã
(và tất cả các tuyên bố về Mô hình bộ nhớ Java) giả sử Java 5.0 trở lên.
Một số ví dụ mã có thể sử dụng các tính năng thư viện được thêm vào trong Java 6.
Các ví dụ mã đã được nén để giảm kích thước của chúng và cao
ánh sáng các phần có liên quan. Các phiên bản đầy đủ của các ví dụ mã, là tốt
như các ví dụ bổ sung và errata, có sẵn từ trang web của cuốn sách,
http://www.javaconcurrencyinpractice.com .
Các ví dụ về mã có ba loại: ví dụ về Good tốt
ples, và ví dụ xấu Bad. Các ví dụ tốt minh họa các kỹ thuật nên được
thi đua. Các ví dụ xấu minh họa các kỹ thuật chắc chắn không nên
được tính toán, và được xác định với một Mr. Biểu tượng Yuk leo 1 để làm rõ rằng đây là
Mã độc hại của người Viking (xem Liệt kê 1). Các ví dụ không tốt minh họa các kỹ thuật
không hẳn là sai nhưng rất mong manh, mạo hiểm hoặc hoạt động kém và được trang trí
với một ông Mr. Có thể là biểu tượng Hạnh phúc hơn như trong Liệt kê 2.
công khai <T mở rộng so sánh <? super T >> void sort (Danh sách <T> list) {
// Không bao giờ trả lời sai!
System.exit (0);
}
Liệt kê 1. Cách xấu để sắp xếp danh sách. Đừng làm điều này.
Một số độc giả có thể đặt câu hỏi về vai trò của các ví dụ xấu Bad trong cuốn sách này; sau
tất cả, một cuốn sách nên chỉ ra cách làm những điều đúng, không sai. Những tấm gương xấu
có hai mục đích. Họ minh họa những cạm bẫy phổ biến, nhưng quan trọng hơn là họ
trình bày cách phân tích một chương trình để đảm bảo an toàn cho luồng và cách tốt nhất để làm
đó là để xem các cách thức mà sự an toàn của luồng bị xâm phạm.
1. Ông Yuk là nhãn hiệu đã đăng ký của Bệnh viện Nhi đồng Pittsburgh và xuất hiện bởi permis-
Sion.

Trang 21
xx
Lời nói đầu
công khai <T mở rộng so sánh <? super T >> void sort (Danh sách <T> list) {
cho (int i = 0; i <1000000; i ++)
không làm gì cả();
Bộ sưu tập.sort (danh sách);
}
Liệt kê 2. Cách ít hơn tối ưu để sắp xếp danh sách.
Sự nhìn nhận
Cuốn sách này phát triển từ quá trình phát triển cho java.util.conc hiện
gói được tạo bởi Quy trình cộng đồng Java JSR 166 để đưa vào
Java 5.0. Nhiều người khác đã đóng góp cho JSR 166; đặc biệt chúng tôi cảm ơn Martin Hội-
holz vì đã làm tất cả các công việc liên quan đến việc lấy mã vào JDK và tất cả
độc giả của danh sách gửi thư quan tâm đồng thời , người đưa ra đề xuất của họ
và phản hồi về các dự thảo API.
Cuốn sách này đã được cải thiện rất nhiều bởi những gợi ý và trợ giúp
của một đội quân nhỏ gồm các nhà phê bình, cố vấn, đội cổ vũ và các nhà phê bình ghế bành. Chúng tôi
Xin cảm ơn Dion Almaer, Tracy Bialik, Cindy Bloch, Martin Buchholz,
Paul Christmann, Cliff Click, Stuart Halloway, David Hovemeyer, Jason Hunter,
Michael Hunter, Jeremy Hylton, Heinz Kabutz, Robert Kuhar, Ramnivas Lad-
cha, Jared Levy, Nicole Lewis, Victor Luchangco, Jeremy Manson, Paul Martin,
Berna Massingill, Michael Maurer, Ted Neward, Kirk Pepperdine, Bill Pugh, Sam
Pullara, Russ Rufer, Bill Scherer, Jeffrey Siegal, Bruce Tate, Gil Tene, Paul Tyma,
và các thành viên của Nhóm Mô hình Thung lũng Silicon, những người thông qua nhiều mối quan tâm-
ing các cuộc hội thoại kỹ thuật, đưa ra hướng dẫn và đưa ra đề xuất giúp
làm cho cuốn sách này tốt hơn
Chúng tôi đặc biệt biết ơn Cliff Biffle, Barry Hayes, Dawid Kurzyniec, Ange-
likea Langer, Doron Rajwan và Bill Venners, những người đã xem xét toàn bộ bản thảo
chi tiết rõ ràng, tìm thấy lỗi trong các ví dụ mã và đề xuất rất nhiều
cải tiến.
Chúng tôi cảm ơn Katrina Avery vì một công việc chỉnh sửa bản sao tuyệt vời và Rosemary Simpson
để sản xuất chỉ số dưới áp lực thời gian không hợp lý. Chúng tôi cảm ơn Ami Dewar
để làm các minh họa.
Cảm ơn toàn bộ đội ngũ tại Addison-Wesley, người đã giúp biến cuốn sách này thành
thực tế. Ann Sellers đã khởi động dự án và Greg Doench đã đưa nó đến
hoàn thành suôn sẻ; Elizabeth Ryan đã hướng dẫn nó trong suốt quá trình sản xuất.
Chúng tôi cũng xin cảm ơn hàng ngàn kỹ sư phần mềm đã-
gián tiếp bằng cách tạo ra phần mềm được sử dụng để tạo ra cuốn sách này, bao gồm
TEX, L A TEX, Adobe Acrobat, pic , grap , Adobe Illustrator, Perl, Apache Ant, IntelliJ
IDEA, GNU emacs, Subversion, TortoiseSVN và tất nhiên, nền tảng Java
và thư viện lớp.

Trang 22
Trang này cố ý để trống

Trang 23
Chương 6
Nhiệm vụ thực thi
Hầu hết các ứng dụng đồng thời được tổ chức xung quanh việc thực hiện các tác vụ : ab-
stract, các đơn vị công việc riêng biệt. Phân chia công việc của một ứng dụng thành các nhiệm vụ
đơn giản hóa tổ chức chương trình, tạo điều kiện phục hồi lỗi bằng cách cung cấp tự nhiên
ranh giới giao dịch và thúc đẩy đồng thời bằng cách cung cấp một cấu trúc tự nhiên
Ture cho công việc song song.
6.1 Thực hiện các nhiệm vụ trong các chủ đề
Bước đầu tiên trong việc tổ chức một chương trình xung quanh thực thi nhiệm vụ là xác định sen-
sible ranh giới nhiệm vụ . Lý tưởng nhất, nhiệm vụ là các hoạt động độc lập : công việc không
phụ thuộc vào trạng thái, kết quả hoặc tác dụng phụ của các nhiệm vụ khác. Facili độc lập-
Tates đồng thời, vì các tác vụ độc lập có thể được thực thi song song nếu có
nguồn lực xử lý đầy đủ. Để linh hoạt hơn trong việc lên lịch và cân bằng tải
các tác vụ bắt buộc, mỗi tác vụ cũng sẽ chiếm một phần nhỏ trong ứng dụng của bạn
năng lực xử lý.
Các ứng dụng máy chủ nên thể hiện cả thông lượng tốt và khả năng đáp ứng tốt
dưới tải bình thường. Các nhà cung cấp ứng dụng muốn các ứng dụng hỗ trợ nhiều
người dùng càng tốt, để giảm chi phí cung cấp cho mỗi người dùng; người dùng muốn có được
Phản ứng của họ nhanh chóng. Hơn nữa, các ứng dụng nên thể hiện sự xuống cấp duyên dáng
khi chúng trở nên quá tải, thay vì chỉ đơn giản là rơi xuống dưới tải nặng.
Chọn ranh giới nhiệm vụ tốt, cùng với chính sách thực thi nhiệm vụ hợp lý (xem
Mục 6.2.2), có thể giúp đạt được các mục tiêu này.
Hầu hết các ứng dụng máy chủ cung cấp một sự lựa chọn tự nhiên về ranh giới nhiệm vụ: cá nhân
yêu cầu khách hàng. Máy chủ web, máy chủ thư, máy chủ tệp, bộ chứa EJB và da-
tất cả các máy chủ tabase chấp nhận yêu cầu thông qua các kết nối mạng từ các máy khách từ xa.
Sử dụng các yêu cầu riêng lẻ làm ranh giới nhiệm vụ thường mang lại sự độc lập
và kích thước nhiệm vụ thích hợp. Ví dụ: kết quả của việc gửi tin nhắn đến
một máy chủ thư không bị ảnh hưởng bởi các thư khác đang được xử lý cùng
thời gian và xử lý một tin nhắn thường đòi hỏi một tỷ lệ rất nhỏ
tổng công suất của máy chủ.
113

Trang 24
114
Chương 6. Thi hành nhiệm vụ
6.1.1 Thực hiện các nhiệm vụ tuần tự
Có một số chính sách có thể để lập lịch cho các nhiệm vụ trong một ứng dụng-
Tion, một số trong đó khai thác tiềm năng đồng thời tốt hơn so với những người khác. Các
đơn giản nhất là thực hiện các nhiệm vụ tuần tự trong một luồng. SingleThreadWeb-
Máy chủ trong Liệt kê 6.1 xử lý các nhiệm vụ của nó Yêu cầu HTTP HTTP đến trên cổng 80.
tuần tự Các chi tiết xử lý yêu cầu không quan trọng; chúng tôi liên
ested trong đặc tính đồng thời của các chính sách lập kế hoạch khác nhau.
lớp SingleThreadWebServer {
public static void main (String [] args) ném IOException {
Ổ cắm ServerSocket = ServerSocket mới (80);
trong khi (đúng) {
Kết nối ổ cắm = socket.accept ();
xử lýRequest (kết nối);
}
}
}
Liệt kê 6.1. Máy chủ web tuần tự.
SingleThreadedWebServer đơn giản và đúng về mặt lý thuyết, nhưng sẽ
hình thành kém trong sản xuất vì nó chỉ có thể xử lý một yêu cầu tại một thời điểm. Các
luồng chính xen kẽ giữa việc chấp nhận kết nối và xử lý kết hợp
yêu cầu Trong khi máy chủ đang xử lý một yêu cầu, các kết nối mới phải chờ
cho đến khi nó kết thúc yêu cầu hiện tại và các cuộc gọi chấp nhận lại. Điều này có thể làm việc nếu
xử lý yêu cầu là quá nhanh đến nỗi handleRequest hiệu quả trở immedi-
hoàn toàn, nhưng điều này không mô tả bất kỳ máy chủ web nào trong thế giới thực.
Xử lý một yêu cầu web liên quan đến sự kết hợp giữa tính toán và I / O. Máy chủ
phải thực hiện I / O của socket để đọc yêu cầu và viết phản hồi, có thể
chặn do tắc nghẽn mạng hoặc sự cố kết nối. Nó cũng có thể thực hiện
tập tin I / O hoặc thực hiện các yêu cầu cơ sở dữ liệu, cũng có thể chặn. Trong một luồng đơn
máy chủ, chặn không chỉ trì hoãn hoàn thành yêu cầu hiện tại, mà còn ngăn chặn
yêu cầu chờ xử lý từ đang được xử lý ở tất cả. Nếu một yêu cầu chặn cho một
Thông thường thời gian dài, người dùng có thể nghĩ rằng máy chủ không khả dụng vì nó xuất hiện
không phản hồi. Đồng thời, việc sử dụng tài nguyên kém, vì CPU nằm
nhàn rỗi trong khi luồng đơn chờ I / O của nó hoàn thành.
Trong các ứng dụng máy chủ, xử lý tuần tự hiếm khi cung cấp tốt
thông lượng hoặc đáp ứng tốt. Có những trường hợp ngoại lệ như khi nhiệm vụ
là ít và tồn tại lâu, hoặc khi máy chủ phục vụ một khách hàng duy nhất chỉ thực hiện
một yêu cầu duy nhất tại một thời điểm, nhưng hầu hết các ứng dụng máy chủ không hoạt động theo cách
này. 1
1. Trong một số tình huống, xử lý tuần tự có thể mang lại lợi thế đơn giản hoặc an toàn; hầu hết GUI
các khung xử lý các tác vụ tuần tự bằng cách sử dụng một luồng. Chúng tôi trở lại mô hình tuần tự trong
Chương 9.

Trang 25
6.1. Thực hiện các nhiệm vụ trong chủ đề
115
6.1.2 Hoàn toàn tạo chủ đề cho các nhiệm vụ
Một cách tiếp cận nhạy hơn là tạo ra một luồng mới để phục vụ từng yêu cầu,
như được hiển thị trong ThreadPerTaskWebServer trong Liệt kê 6.2.
lớp ThreadPerTaskWebServer {
public static void main (String [] args) ném IOException {
Ổ cắm ServerSocket = ServerSocket mới (80);
trong khi (đúng) {
kết nối socket cuối cùng = socket.accept ();
Tác vụ có thể chạy = mới Runnable () {
công khai void run () {
xử lýRequest (kết nối);
}
};
Chủ đề mới (nhiệm vụ) .start ();
}
}
}
Liệt kê 6.2. Máy chủ web bắt đầu một chủ đề mới cho mỗi yêu cầu.
ThreadPerTaskWebServer có cấu trúc tương tự như luồng đơn
phiên bản, chủ đề chính vẫn xen kẽ giữa việc chấp nhận một con-
lựa chọn và gửi yêu cầu. Sự khác biệt là cho mỗi kết nối,
vòng lặp chính tạo ra một luồng mới để xử lý yêu cầu thay vì xử lý nó
trong chủ đề chính. Điều này có ba hậu quả chính:
• Xử lý tác vụ được giảm tải từ luồng chính, cho phép vòng lặp chính
để tiếp tục chờ kết nối đến tiếp theo nhanh hơn. Điều này
cho phép các kết nối mới được chấp nhận trước khi hoàn thành các yêu cầu trước đó,
nâng cao khả năng đáp ứng.
• Nhiệm vụ có thể được xử lý song song, cho phép nhiều yêu cầu được phục vụ
đồng thời. Điều này có thể cải thiện thông lượng nếu có nhiều quá trình-
ors hoặc nếu các tác vụ cần chặn vì bất kỳ lý do nào như hoàn thành I / O, khóa
mua lại, hoặc nguồn lực sẵn có.
• Mã xử lý tác vụ phải an toàn cho luồng, bởi vì nó có thể được gọi đồng thời
rently cho nhiều nhiệm vụ.
Dưới tải trọng nhẹ đến trung bình, cách tiếp cận luồng trên mỗi tác vụ là một cải tiến
thực hiện tuần tự. Miễn là tỷ lệ đến yêu cầu không vượt quá
khả năng xử lý các yêu cầu của máy chủ, phương pháp này cung cấp khả năng đáp ứng tốt hơn
và thông lượng.

Trang 26
116
Chương 6. Thi hành nhiệm vụ
6.1.3 Nhược điểm của việc tạo luồng không giới hạn
Tuy nhiên, để sử dụng sản xuất, cách tiếp cận luồng trên mỗi tác vụ có một số thực tế
nhược điểm, đặc biệt là khi một số lượng lớn các chủ đề có thể được tạo ra:
Chủ đề vòng đời trên không. Tạo chủ đề và xé không miễn phí. Các ac-
chi phí hoạt động khác nhau giữa các nền tảng, nhưng việc tạo chủ đề cần có thời gian, giới thiệu
giảm độ trễ vào xử lý yêu cầu và yêu cầu một số kích hoạt xử lý
ity bởi JVM và OS. Nếu yêu cầu là thường xuyên và nhẹ, như trong hầu hết
ứng dụng máy chủ, tạo một luồng mới cho mỗi yêu cầu có thể tiêu thụ
tài nguyên điện toán đáng kể.
Tiêu thụ tài nguyên. Chủ đề hoạt động tiêu thụ tài nguyên hệ thống, đặc biệt là
ký ức. Khi có nhiều luồng có thể chạy hơn quy trình có sẵn-
Ors, chủ đề ngồi không. Có nhiều luồng nhàn rỗi có thể kết nối rất nhiều bộ nhớ,
gây áp lực lên người thu gom rác và có nhiều luồng
peting cho CPU cũng có thể áp đặt các chi phí hiệu suất khác. Nếu bạn có
đủ các luồng để giữ cho tất cả các CPU bận rộn, tạo thêm các luồng sẽ không giúp ích
và thậm chí có thể bị tổn thương.
Ổn định. Có giới hạn về số lượng chủ đề có thể được tạo. Giới hạn khác nhau
bởi nền tảng và bị ảnh hưởng bởi các yếu tố bao gồm các tham số gọi JVM,
kích thước ngăn xếp được yêu cầu trong chủ đề xây dựng, và giới hạn về chủ đề
được đặt bởi hệ điều hành cơ bản. 2 Khi bạn đạt đến giới hạn này,
kết quả rất có thể là OutOfMemoryError . Đang cố gắng phục hồi từ một
lỗi rất rủi ro; dễ dàng hơn nhiều để cấu trúc chương trình của bạn để tránh nhấn
giới hạn này.
Lên đến một điểm nhất định, nhiều luồng có thể cải thiện thông lượng, nhưng ngoài đó
việc tạo nhiều chủ đề hơn chỉ làm chậm ứng dụng của bạn và tạo một chủ đề
quá nhiều luồng có thể khiến toàn bộ ứng dụng của bạn bị sập một cách khủng khiếp. Cách để
tránh xa nguy hiểm là đặt một số ràng buộc vào ứng dụng của bạn
tạo và kiểm tra ứng dụng của bạn một cách kỹ lưỡng để đảm bảo rằng, ngay cả khi điều này
ràng buộc là đạt được, nó không hết tài nguyên.
Vấn đề với cách tiếp cận luồng trên mỗi tác vụ là không có gì đặt
giới hạn số lượng luồng được tạo ngoại trừ tốc độ người dùng từ xa có thể
ném các yêu cầu HTTP vào nó. Giống như các mối nguy tương tranh khác, luồng không giới hạn
tạo có thể xuất hiện để làm việc tốt trong prototyping và phát triển, với
vấn đề chỉ nổi lên khi ứng dụng được triển khai và tải nặng.
Vì vậy, một người dùng độc hại hoặc đủ người dùng thông thường có thể khiến máy chủ web của bạn gặp
sự cố
nếu tải lưu lượng bao giờ đạt đến một ngưỡng nhất định. Đối với một ứng dụng máy chủ
được cho là cung cấp tính sẵn sàng cao và xuống cấp duyên dáng dưới tải, điều này
là một thất bại nghiêm trọng.
2. Trên máy 32 bit, một yếu tố giới hạn chính là không gian địa chỉ cho ngăn xếp luồng. Mỗi chủ đề
chính-
Có hai ngăn xếp thực thi, một cho mã Java và một cho mã gốc. Sản lượng mặc định JVM điển hình
kích thước ngăn xếp kết hợp khoảng nửa megabyte. (Bạn có thể thay đổi điều này với cờ JX -Xss hoặc
thông qua các Chủ đề constructor.) Nếu bạn chia ngăn xếp kích thước mỗi sợi thành 2 32 , bạn sẽ có được
một giới hạn
một vài ngàn hoặc hàng chục ngàn chủ đề. Các yếu tố khác, chẳng hạn như các hạn chế của hệ điều hành,
có thể áp đặt
giới hạn chặt chẽ hơn.

Trang 27
6.2. Các Executor khuôn khổ
117
6.2 Executor khuôn khổ
Nhiệm vụ là các đơn vị công việc logic và các luồng là một cơ chế theo đó các nhiệm vụ
có thể chạy không đồng bộ. Chúng tôi đã kiểm tra hai chính sách để thực hiện các tác vụ bằng cách sử
dụng
Các luồng xử lý các nhiệm vụ tuần tự trong một luồng và thực hiện từng tác vụ trong nó
chủ đề riêng. Cả hai đều có những hạn chế nghiêm trọng: cách tiếp cận tuần tự bị
khả năng đáp ứng và thông lượng kém, và cách tiếp cận luồng trên mỗi tác vụ bị ảnh hưởng
từ quản lý tài nguyên kém.
Trong Chương 5, chúng ta đã thấy cách sử dụng hàng đợi bị chặn để ngăn chặn tình trạng quá tải
ứng dụng hết bộ nhớ. Nhóm luồng cung cấp cùng một lợi ích cho
quản lý luồng và java.util.conc hiện cung cấp nhóm luồng linh hoạt
thực hiện như là một phần của khung Executor . Sự trừu tượng chính cho
thực thi tác vụ trong các thư viện lớp Java không phải là Thread , mà là Executor , được hiển thị trong
Liệt kê 6.3.
Giao diện công cộng Executor {
void thực thi (lệnh Runnable);
}
Liệt kê 6.3. Giao diện điều hành .
Executor có thể là một giao diện đơn giản, nhưng nó tạo thành cơ sở cho sự linh hoạt và
khung mạnh mẽ để thực thi tác vụ không đồng bộ hỗ trợ nhiều biến thể
ety của các chính sách thực thi nhiệm vụ. Nó cung cấp một phương tiện tiêu chuẩn của nhiệm vụ tách rời
đệ trình từ thực thi nhiệm vụ , mô tả các nhiệm vụ với Runnable . các Executor
triển khai cũng cung cấp hỗ trợ vòng đời và móc để thêm số liệu thống kê
thu thập, quản lý ứng dụng và giám sát.
Executor dựa trên mô hình nhà sản xuất-người tiêu dùng, nơi các hoạt động
nhiệm vụ được gửi là nhà sản xuất (đơn vị sản xuất công việc phải hoàn thành) và
chủ đề thực thi các nhiệm vụ là người tiêu dùng (tiêu thụ các đơn vị công việc).
Sử dụng Executor thường là cách dễ nhất để thực hiện một nhà sản xuất-người tiêu dùng
thiết kế trong ứng dụng của bạn.
6.2.1 Ví dụ: máy chủ web sử dụng Executor
Xây dựng một máy chủ web với Executor rất dễ dàng. TaskExecutWebServer trong
Liệt kê 6.4 thay thế việc tạo luồng được mã hóa cứng bằng Executor . Trong này
trong trường hợp này, chúng tôi sử dụng một trong các triển khai Executor tiêu chuẩn , một luồng có kích
thước cố định
hồ bơi với 100 chủ đề.
Trong TaskExecutWebServer , việc gửi tác vụ xử lý yêu cầu được hủy
được ghép nối từ việc thực thi bằng Executor và hành vi của nó có thể được thay đổi
chỉ bằng cách thay thế một thực thi Executor khác . Thay đổi nhân viên điều hành
triển khai hoặc cấu hình ít xâm lấn hơn nhiều so với thay đổi cách thức thực hiện nhiệm vụ
được đệ trình; Cấu hình thực thi thường là một sự kiện một lần và có thể dễ dàng
ily được hiển thị cho cấu hình thời gian triển khai, trong khi mã trình nhiệm vụ
có xu hướng rải rác trong suốt chương trình và khó để lộ hơn.

Trang 28
118
Chương 6. Thi hành nhiệm vụ
lớp TaskExecutWebServer {
tĩnh cuối cùng int NTHREADS = 100;
tư nhân thực thi tĩnh cuối cùng
= Executors.newFixedThreadPool (NTHREADS);
public static void main (String [] args) ném IOException {
Ổ cắm ServerSocket = ServerSocket mới (80);
trong khi (đúng) {
kết nối socket cuối cùng = socket.accept ();
Tác vụ có thể chạy = mới Runnable () {
công khai void run () {
xử lýRequest (kết nối);
}
};
exec.execute (nhiệm vụ);
}
}
}
Liệt kê 6.4. Máy chủ web sử dụng một nhóm luồng.
Chúng ta có thể dễ dàng sửa đổi TaskExecutWebServer để hoạt động như ThreadPer-
TaskWebServer bằng cách thay thế một Executor tạo ra một luồng mới cho mỗi luồng
yêu cầu. Viết một Executor như vậy là chuyện nhỏ, như được hiển thị trong ThreadPerTaskExecut-
hoặc trong Liệt kê 6.5.
lớp công khai ThreadPerTaskExecutor thực hiện Executor {
thực thi void void (Runnable r) {
Chủ đề mới (r) .start ();
};
}
Liệt kê 6.5. Executor bắt đầu một chủ đề mới cho mỗi nhiệm vụ.
Tương tự, thật dễ dàng để viết một Executor sẽ tạo ra TaskExecut-
ionWebServer hoạt động giống như phiên bản đơn luồng, thực thi từng nhiệm vụ đồng bộ hóa
theo thời gian trước khi trở về từ thực thi , như được hiển thị trong InsideThreadExecutor
trong Liệt kê 6.6.
6.2.2 Chính sách thực thi
Giá trị của việc đệ trình tách rời khỏi thực thi là nó cho phép bạn dễ dàng chỉ định
ify, và sau đó thay đổi mà không gặp khó khăn lớn, chính sách thực thi cho một
lớp nhiệm vụ nhất định. Chính sách thực thi chỉ định cho người dùng những gì, ở đâu, khi nào và
Làm thế nào để thực hiện nhiệm vụ, bao gồm:

Trang 29
6.2. Các Executor khuôn khổ
119
lớp công khai InsideThreadExecutor thực hiện Executor {
thực thi void void (Runnable r) {
r.run ();
};
}
Liệt kê 6.6. Executor thực thi các nhiệm vụ một cách đồng bộ trong luồng gọi.
• Trong các chủ đề, nhiệm vụ sẽ được thực hiện?
• Các nhiệm vụ nên được thực hiện theo thứ tự nào (FIFO, LIFO, thứ tự ưu tiên)?
• Có bao nhiêu nhiệm vụ có thể thực hiện đồng thời?
• Có bao nhiêu nhiệm vụ có thể được xếp hàng chờ thực thi?
• Nếu một nhiệm vụ phải bị từ chối vì hệ thống bị quá tải, thì nhiệm vụ nào
nên được chọn là nạn nhân, và ứng dụng nên được thông báo như thế nào
đã chết?
• Những hành động nào nên được thực hiện trước hoặc sau khi thực hiện một nhiệm vụ?
Chính sách thực thi là một công cụ quản lý tài nguyên và chính sách tối ưu
phụ thuộc vào tài nguyên tính toán có sẵn và chất lượng dịch vụ của bạn
quirements. Bằng cách giới hạn số lượng tác vụ đồng thời, bạn có thể đảm bảo rằng
ứng dụng không bị lỗi do cạn kiệt tài nguyên hoặc bị ảnh hưởng
vấn đề do tranh chấp nguồn lực khan hiếm. 3 Phân tách đặc điểm kỹ thuật của
chính sách thực thi từ trình nhiệm vụ làm cho nó thực tế để chọn một thực thi
chính sách tại thời điểm triển khai phù hợp với phần cứng có sẵn.
Bất cứ khi nào bạn thấy mã của mẫu:
Chủ đề mới (runnable) .start ()
và bạn nghĩ rằng một lúc nào đó bạn có thể muốn thực thi linh hoạt hơn
chính sách, nghiêm túc xem xét việc thay thế nó bằng việc sử dụng Executor.
6.2.3 Nhóm chủ đề
Nhóm luồng, như tên gọi của nó, quản lý một nhóm công nhân đồng nhất
chủ đề. Nhóm luồng được liên kết chặt chẽ với hàng đợi công việc đang giữ các nhiệm vụ đang chờ
được thực thi. Chủ đề công nhân có một cuộc sống đơn giản: yêu cầu nhiệm vụ tiếp theo từ
xếp hàng công việc, thực hiện nó và quay trở lại để chờ đợi một nhiệm vụ khác.
3. Điều này tương tự với một trong những vai trò của người giám sát giao dịch trong ứng dụng doanh
nghiệp: nó có thể
tăng tốc độ giao dịch được phép tiến hành để không bị cạn kiệt hoặc quá tải giới hạn
tài nguyên.

Trang 30
120
Chương 6. Thi hành nhiệm vụ
Thực thi các tác vụ trong các chủ đề nhóm có một số lợi thế so với các chủ đề-
phương pháp tiếp cận mỗi nhiệm vụ. Sử dụng lại một chủ đề hiện có thay vì tạo một chủ đề mới
khấu hao chi phí tạo và xé chỉ qua nhiều yêu cầu. Như một
thêm tiền thưởng, vì luồng công nhân thường tồn tại tại thời điểm yêu cầu
đến, độ trễ liên quan đến việc tạo luồng không làm trì hoãn thực thi tác vụ,
do đó cải thiện khả năng đáp ứng. Bằng cách điều chỉnh đúng kích thước của nhóm luồng,
bạn có thể có đủ luồng để giữ cho bộ xử lý bận trong khi không có
nhiều ứng dụng của bạn hết bộ nhớ hoặc bị giật do cạnh tranh
trong số các chủ đề cho tài nguyên.
Thư viện lớp cung cấp một triển khai nhóm luồng linh hoạt cùng với
một số cấu hình được xác định trước hữu ích. Bạn có thể tạo một nhóm luồng bằng cách gọi
một trong những phương thức tĩnh của nhà máy trong Executors :
newFixedThreadPool . Nhóm luồng có kích thước cố định sẽ tạo các luồng khi các tác vụ là phụ
mited, lên đến kích thước nhóm tối đa, và sau đó cố gắng giữ hồ bơi
hằng số kích thước (thêm chủ đề mới nếu một chủ đề bị chết do không mong muốn
Ngoại lệ ).
newCachedThreadPool . Nhóm luồng được lưu trữ có bộ đệm linh hoạt hơn để gặt hái không hoạt động
chủ đề khi kích thước hiện tại của nhóm vượt quá nhu cầu cho quá trình-
ing và để thêm chủ đề mới khi nhu cầu tăng, nhưng không có giới hạn
về kích thước của hồ bơi.
newSingleThreadExecutor . Một thực thi đơn luồng tạo ra một công nhân
luồng để xử lý các tác vụ, thay thế nó nếu nó chết bất ngờ. Nhiệm vụ là guar-
anteed được xử lý tuần tự theo thứ tự được áp đặt bởi
hàng đợi nhiệm vụ (FIFO, LIFO, thứ tự ưu tiên). 4
newSchediatedThreadPool . Nhóm luồng có kích thước cố định hỗ trợ trì hoãn và
thực hiện nhiệm vụ định kỳ, tương tự như Timer . (Xem Mục 6.2.5.)
Các newFixedThreadPool và newCachedThreadPool nhà máy trở lại trong-
quan điểm của ThreadPoolExecutor , mục đích chung , cũng có thể được sử dụng
trực tiếp để xây dựng các giám đốc điều hành chuyên ngành hơn. Chúng tôi thảo luận về chủ đề pool
configu-
tùy chọn khẩu phần theo chiều sâu trong Chương 8.
Máy chủ web trong TaskExecutWebServer sử dụng Executor có giới hạn
nhóm chủ đề công nhân. Đệ trình một tác vụ với thực thi sẽ thêm nhiệm vụ vào công việc
hàng đợi và các luồng công nhân lặp đi lặp lại các nhiệm vụ từ hàng đợi công việc
và thực hiện chúng.
Chuyển đổi từ chính sách luồng trên mỗi tác vụ sang chính sách dựa trên nhóm có tác dụng lớn
về tính ổn định của ứng dụng: máy chủ web sẽ không còn bị tải nặng nữa. 5
4. Người thi hành một luồng cũng cung cấp đủ đồng bộ hóa nội bộ để đảm bảo rằng bất kỳ
bộ nhớ ghi được thực hiện bởi các tác vụ được hiển thị cho các nhiệm vụ tiếp theo; điều này có nghĩa là
các đối tượng có thể được an toàn
Chỉ giới hạn trong luồng tác vụ của nhiệm vụ, mặc dù luồng đó có thể được thay thế bằng luồng khác
theo thời gian
thời gian.
5. Mặc dù máy chủ có thể không bị lỗi do tạo quá nhiều luồng, nếu tỷ lệ đến nhiệm vụ vượt quá
tốc độ dịch vụ tác vụ đủ lâu vẫn có thể (chỉ khó hơn) hết bộ nhớ vì
của hàng đợi ngày càng tăng của Runnable đang chờ thực thi. Điều này có thể được giải quyết
trong Executor
khung bằng cách sử dụng hàng đợi công việc giới hạn, xem phần 8.3.2.

Trang 31
6.2. Các Executor khuôn khổ
121
Nó cũng xuống cấp một cách duyên dáng hơn, vì nó không tạo ra hàng ngàn chủ đề
cạnh tranh cho nguồn tài nguyên CPU và bộ nhớ hạn chế. Và sử dụng một Executor
mở ra cánh cửa cho tất cả các loại cơ hội bổ sung để điều chỉnh, quản lý,
giám sát, ghi nhật ký, báo cáo lỗi và các khả năng khác có thể đã xảy ra
khó khăn hơn để thêm mà không có khung thực thi nhiệm vụ.
6.2.4 Vòng đời của nhân viên điều hành
Chúng ta đã thấy làm thế nào để tạo ra một Executor nhưng không làm thế nào để tắt một cái. Một Exec-
thực hiện utor có khả năng tạo chủ đề cho các tác vụ xử lý. Nhưng JVM
không thể thoát cho đến khi tất cả các luồng (nondaemon) đã kết thúc, do đó không thể tắt
xuống một Executor có thể ngăn JVM thoát.
Bởi vì Executor xử lý các tác vụ không đồng bộ, tại bất kỳ thời điểm nào,
trạng thái của các nhiệm vụ được gửi trước đó là không rõ ràng ngay lập tức. Một số có thể có
đã hoàn thành, một số có thể đang chạy và một số khác có thể đang xếp hàng chờ
chấp hành. Trong việc tắt một ứng dụng, có một phổ từ duyên dáng
tắt máy (kết thúc những gì bạn đã bắt đầu nhưng không chấp nhận bất kỳ công việc mới nào) để đột ngột
tắt máy (tắt nguồn cho phòng máy) và nhiều điểm khác nhau
mười hai. Vì Executor cung cấp dịch vụ cho các ứng dụng, nên họ có thể
cũng bị tắt, cả duyên dáng và đột ngột, và cung cấp lại thông tin cho
ứng dụng về trạng thái của các tác vụ bị ảnh hưởng bởi việc tắt máy.
Để giải quyết vấn đề về vòng đời dịch vụ thực thi, ExecutorService in-
terface mở rộng Executor , thêm một số phương thức để quản lý vòng đời
(cũng như một số phương pháp thuận tiện để nộp nhiệm vụ). Người đàn ông vòng đời-
các phương thức agement của ExecutorService được hiển thị trong Liệt kê 6.7.
giao diện công cộng ExecutorService mở rộng Executor {
void shutdown ();
Danh sách <Runnable> shutdownNow ();
boolean isShutdown ();
boolean isTermined ();
boolean awaitTermination (thời gian chờ dài, đơn vị TimeUnit)
ném Interrupttedception;
// ... phương thức tiện lợi bổ sung để gửi nhiệm vụ
}
Liệt kê 6.7. Các phương thức vòng đời trong ExecutorService .
Vòng đời được ngụ ý bởi ExecutorService có ba trạng thái đang chạy , tắt
xuống , và chấm dứt . Các ExecutorService ban đầu được tạo trong trạng thái đang chạy .
Các shutdown phương pháp khởi tạo một shutdown duyên dáng: không có nhiệm vụ mới được chấp nhận
nhưng các nhiệm vụ đã gửi trước đây được phép hoàn thành trong đó có các nhiệm vụ
vẫn chưa bắt đầu thực hiện. Các shutdownNow phương pháp tu một shut- đột ngột
xuống: nó cố gắng hủy các nhiệm vụ còn tồn tại và không bắt đầu bất kỳ nhiệm vụ nào
được xếp hàng nhưng không bắt đầu.
Các nhiệm vụ được gửi tới ExecutorService sau khi nó bị tắt là han-
được xử lý bởi trình xử lý thực thi bị từ chối (xem Phần 8.3.3), có thể âm thầm loại bỏ

Trang 32
122
Chương 6. Thi hành nhiệm vụ
thẻ nhiệm vụ hoặc có thể gây ra thực hiện để ném được kiểm soát RejectedExecu-
ngoại lệ . Khi tất cả các tác vụ đã hoàn thành, quá trình chuyển đổi ExecutorService
đến trạng thái chấm dứt . Bạn có thể đợi ExecutorService đạt đến hạn
trạng thái nated với awaitTermination , hoặc cuộc thăm dò cho dù nó đã kết thúc với
Được xác định . Thông thường nên theo dõi tắt máy ngay lập tức bằng cách chờ đợi
tion , tạo hiệu ứng tắt đồng bộ dịch vụ ExecutorService .
( Tắt máy thực thi và hủy bỏ nhiệm vụ được đề cập chi tiết hơn trong Chương
7.)
LifecyclWebServer trong Liệt kê 6.8 mở rộng máy chủ web của chúng tôi với siêu vòng đời
Hải cảng. Nó có thể được tắt theo hai cách: lập trình bằng cách gọi dừng và
thông qua một yêu cầu khách hàng bằng cách gửi cho máy chủ web một HTTP được định dạng đặc biệt
yêu cầu.
lớp LifecyclWebServer {
riêng cuối cùng ExecutorService exec = ...;
công khai void start () ném IOException {
Ổ cắm ServerSocket = ServerSocket mới (80);
while (! exec.isShutdown ()) {
thử {
Ổ cắm cuối cùng Conn = socket.accept ();
exec.execute (mới Runnable () {
công khai void run () {handleRequest (Conn); }
});
} Catch (RejectionExecutException e) {
if (! exec.isShutdown ())
log ("nhiệm vụ bị từ chối", e);
}
}
}
công khai void stop () {exec.shutdown (); }
void handleRequest (Kết nối ổ cắm) {
Yêu cầu req = readRequest (kết nối);
if (isShutdownRequest (req))
dừng lại();
khác
ClarkRequest (req);
}
}
Liệt kê 6.8. Máy chủ web có hỗ trợ tắt máy.

Trang 33
6.3. Tìm song song có thể khai thác
123
6.2.5 Nhiệm vụ bị trì hoãn và định kỳ
Công cụ hẹn giờ quản lý việc thực hiện hoãn lại (Dịch vụ này chạy trong 100 ms)
và định kỳ (các lượt chạy nhiệm vụ này cứ sau 10 ms) nhiệm vụ. Tuy nhiên, Timer có một số lợi thế
ủng hộ và lên lịchThreadPoolExecutor nên được coi là thay thế của nó-
tinh thần 6 Bạn có thể xây dựng một Lịch trìnhThreadPoolExecutor thông qua cấu trúc của nó-
tor hoặc thông qua nhà máy newSchediatedThreadPool .
Một Hẹn giờ tạo ra chỉ một chủ đề duy nhất để thực hiện nhiệm vụ hẹn giờ. Nếu hẹn giờ
tác vụ mất quá nhiều thời gian để chạy, độ chính xác về thời gian của các TimerTask khác có thể bị ảnh
hưởng.
Nếu TimerTask định kỳ được lên lịch để chạy cứ sau 10 ms và một Timer khác-
Tác vụ mất 40 ms để chạy, tác vụ định kỳ hoặc (tùy thuộc vào việc nó có
được lên lịch ở mức cố định hoặc độ trễ cố định) được gọi bốn lần liên tiếp
sau khi hoàn thành nhiệm vụ dài hạn, hoặc hoàn toàn bỏ lỡ bốn lệnh gọi.
Nhóm luồng được lên lịch giải quyết giới hạn này bằng cách cho phép bạn cung cấp nhiều
chủ đề để thực hiện các nhiệm vụ hoãn lại và định kỳ.
Một vấn đề khác với Timer là nó hoạt động kém nếu TimerTask ném
một ngoại lệ không được kiểm soát. Chuỗi Timer không bắt được ngoại lệ, vì vậy, một
kiểm tra ngoại lệ được ném từ TimerTask chấm dứt luồng hẹn giờ. Hẹn giờ
cũng không hồi sinh chuỗi trong tình huống này; thay vào đó, nó giả định sai
toàn bộ Timer đã bị hủy. Trong trường hợp này, các TimerTask đã được lên lịch
Được quy định nhưng chưa được thực hiện sẽ không bao giờ được chạy và các tác vụ mới không thể được
lên lịch.
(Vấn đề này, được gọi là rò rỉ luồng chủ đề, được mô tả trong Phần 7.3, cùng với
kỹ thuật để tránh nó.)
OutOfTime trong Liệt kê 6.9 minh họa cách Timer có thể bị lẫn lộn trong phần này
cách thức và, như sự nhầm lẫn yêu công ty, làm thế nào Timer chia sẻ sự nhầm lẫn của nó
với người gọi không may tiếp theo cố gắng gửi TimerTask . Bạn có thể mong đợi
chương trình chạy trong sáu giây và thoát, nhưng điều thực sự xảy ra là
nó kết thúc sau một giây với IllegalStateException có thông báo
văn bản là Timer Timer đã bị hủy bỏ. Lên lịchThreadPoolExecutor giao dịch đúng
với những nhiệm vụ không tốt; Có rất ít lý do để sử dụng Timer trong Java 5.0 trở lên.
Nếu bạn cần xây dựng dịch vụ lập lịch trình của riêng mình, bạn vẫn có thể thực hiện
lợi thế của thư viện bằng cách sử dụng DelayQueue , triển khai BlockingQueue
cung cấp chức năng lập lịch biểu của lên lịchThreadPoolExecutor . Một
DelayQueue quản lý một bộ sưu tập các đối tượng Trì hoãn . Một hoãn có thời gian trễ
liên kết với nó: DelayQueue cho phép bạn lấy một phần tử chỉ khi độ trễ của nó có
hết hạn Các đối tượng được trả về từ DelayQueue được sắp xếp theo thời gian liên quan
với sự chậm trễ của họ.
6.3 Tìm song song có thể khai thác
Khung Executor giúp dễ dàng xác định chính sách thực thi, nhưng trong
để sử dụng Executor , bạn phải có thể mô tả nhiệm vụ của mình là Runn-
thể . Trong hầu hết các ứng dụng máy chủ, có một ranh giới nhiệm vụ rõ ràng: một
Yêu cầu khách hàng. Nhưng đôi khi ranh giới nhiệm vụ tốt không quá rõ ràng, như
6. Timer có hỗ trợ lập lịch dựa trên thời gian tuyệt đối, không tương đối, để các tác vụ có thể được
nhạy cảm với những thay đổi trong đồng hồ hệ thống; Lên lịchThreadPoolExecutor chỉ hỗ trợ thời gian
tương đối.

Trang 34
124
Chương 6. Thi hành nhiệm vụ
lớp công khai OutOfTime {
public static void main (String [] args) throws Exception {
Hẹn giờ hẹn giờ = Timer mới ();
timer.schedule (throwTask mới (), 1);
GIÂY. Ngủ (1);
timer.schedule (throwTask mới (), 1);
GIÂY. Ngủ (5);
}
lớp tĩnh throwTask mở rộng TimerTask {
công khai void run () {ném new RuntimeException (); }
}
}
Liệt kê 6.9. Lớp minh họa hành vi Timer khó hiểu .
trong nhiều ứng dụng máy tính để bàn. Cũng có thể có sự song song có thể khai thác trong
một yêu cầu máy khách trong các ứng dụng máy chủ, đôi khi là trong trường hợp cơ sở dữ liệu
may chủ. (Để thảo luận thêm về các lực lượng thiết kế cạnh tranh trong việc lựa chọn nhiệm vụ
các ranh giới, xem [CPJ 4.4.1.1].)
Trong phần này, chúng tôi phát triển một số phiên bản của một thành phần thừa nhận khác nhau
mức độ đồng thời. Thành phần mẫu của chúng tôi là phần kết xuất trang của
một ứng dụng trình duyệt, lấy một trang HTML và biến nó thành một hình ảnh
đệm. Để đơn giản, chúng tôi giả sử rằng HTML chỉ bao gồm đánh dấu
văn bản xen kẽ với các yếu tố hình ảnh với các kích thước và URL được chỉ định trước.
6.3.1 Ví dụ: trình kết xuất trang tuần tự
Cách tiếp cận đơn giản nhất là xử lý tài liệu HTML theo tuần tự. Như văn bản
đánh dấu được bắt gặp, đưa nó vào bộ đệm hình ảnh; như tài liệu tham khảo hình ảnh là
gặp phải, tìm nạp hình ảnh qua mạng và vẽ nó vào bộ đệm hình ảnh
cũng. Điều này dễ thực hiện và yêu cầu chạm vào từng yếu tố của
chỉ nhập một lần (thậm chí không yêu cầu đệm tài liệu), nhưng có khả năng
làm phiền người dùng, những người có thể phải chờ rất lâu trước khi tất cả văn bản được hiển thị.
Một cách tiếp cận ít phiền toái hơn nhưng vẫn tuần tự liên quan đến việc hiển thị văn bản
đầu tiên, để lại chỗ dành cho hình chữ nhật cho hình ảnh và sau khi hoàn thành
vượt qua ban đầu trên tài liệu, quay lại và tải xuống các hình ảnh và
vẽ chúng vào trình giữ chỗ liên quan. Cách tiếp cận này được thể hiện trong Sin-
gleThreadRenderer trong Liệt kê 6.10.
Tải xuống một hình ảnh chủ yếu liên quan đến việc chờ I / O hoàn thành và kéo dài
Lần này CPU không hoạt động. Vì vậy, cách tiếp cận tuần tự có thể
sử dụng CPU và cũng khiến người dùng chờ đợi lâu hơn mức cần thiết để xem
trang xong. Chúng tôi có thể đạt được việc sử dụng và đáp ứng tốt hơn bằng cách phá vỡ
vấn đề thành các nhiệm vụ độc lập có thể thực hiện đồng thời.

Trang 35
6.3. Tìm song song có thể khai thác
125
lớp công khai SingleThreadRenderer {
void renderPage (nguồn CharSequence) {
renderText (nguồn);
Danh sách <ImageData> imageData = new ArrayList <ImageData> ();
cho (ImageInfo imageInfo: scanForImageInfo (nguồn))
imageData.add (imageInfo.doadImage ());
cho (dữ liệu ImageData: imageData)
renderImage (dữ liệu);
}
}
Liệt kê 6.10. Kết xuất các yếu tố trang tuần tự.
6.3.2 Nhiệm vụ Result chịu: Callable và tương lai
Khung Executor sử dụng Runnable làm đại diện cho nhiệm vụ cơ bản của nó. Chạy-
có thể là một sự trừu tượng khá hạn chế; chạy không thể trả lại giá trị hoặc ném kiểm tra
ngoại lệ, mặc dù nó có thể có tác dụng phụ như ghi vào tệp nhật ký hoặc đặt
một kết quả trong một cấu trúc dữ liệu được chia sẻ.
Nhiều tác vụ được tính toán hoãn lại một cách hiệu quả.
truy vấn, tìm nạp tài nguyên qua mạng hoặc tính toán một hàm phức tạp
sự. Đối với các loại nhiệm vụ này, Callable là một sự trừu tượng hóa tốt hơn: nó hy vọng rằng
điểm vào chính, cuộc gọi , sẽ trả về một giá trị và dự đoán rằng nó có thể ném
một ngoại lệ. 7 Người thực hiện bao gồm một số phương pháp tiện ích để gói khác
các loại tác vụ, bao gồm Runnable và java.security.PrivilegedAction , với
một Callable .
Runnable và Callable mô tả các nhiệm vụ tính toán trừu tượng. Nhiệm vụ là usu-
đồng minh hữu hạn: họ có điểm xuất phát rõ ràng và cuối cùng họ chấm dứt. Các
vòng đời của một tác vụ được thực thi bởi Executor có bốn giai đoạn: được tạo , gửi ,
bắt đầu và hoàn thành . Vì các tác vụ có thể mất nhiều thời gian để chạy, chúng tôi cũng muốn trở thành
có thể hủy bỏ một nhiệm vụ. Trong khung Executor , các nhiệm vụ đã được gửi
nhưng chưa bắt đầu luôn có thể bị hủy và một số nhiệm vụ đã bắt đầu có thể
thời gian bị hủy nếu chúng phản ứng với sự gián đoạn. Hủy bỏ một nhiệm vụ mà
đã hoàn thành không có hiệu lực. (Hủy bỏ được đề cập chi tiết hơn trong
Chương 7.)
Tương lai đại diện cho vòng đời của một nhiệm vụ và cung cấp các phương pháp để kiểm tra xem
tác vụ đã hoàn thành hoặc bị hủy, lấy kết quả và hủy tác vụ.
Có thể gọi và Tương lai được hiển thị trong Liệt kê 6.11. Tiềm ẩn trong đặc điểm kỹ thuật của
Tương lai là vòng đời nhiệm vụ chỉ có thể di chuyển về phía trước chứ không thể lùi về phía trước giống
như
Vòng đời của ExecutorService . Khi một nhiệm vụ được hoàn thành, nó sẽ ở trong trạng thái đó mãi mãi.
Hành vi của get khác nhau tùy thuộc vào trạng thái nhiệm vụ (chưa bắt đầu, chạy-
ning, đã hoàn thành). Nó trả về ngay lập tức hoặc ném Ngoại lệ nếu tác vụ
đã hoàn thành, nhưng nếu không nó sẽ chặn cho đến khi nhiệm vụ hoàn thành. Nếu nhiệm vụ
hoàn thành bằng cách ném một ngoại lệ, nhận lại nó được gói trong Thi hành-
7. Để thể hiện tác vụ không trả về giá trị với Callable , hãy sử dụng Callable <Void> .

Trang 36
126
Chương 6. Thi hành nhiệm vụ
giao diện công cộng Có thể gọi được <V> {
V gọi () ném Ngoại lệ;
}
giao diện công cộng Tương lai <V> {
hủy boolean (boolean mayInterrupt IfRasty);
boolean isCancelling ();
boolean isDone ();
V get () ném Interrupttedception, ExecutException,
Hủy bỏ Ngoại lệ;
V nhận (thời gian chờ dài, đơn vị TimeUnit)
ném Interrupttedception, ExecutException,
Hủy bỏ ngoại lệ, TimeoutException;
}
Liệt kê 6.11. Callable và tương lai giao diện.
Ngoại lệ ; nếu nó bị hủy, hãy ném CancellingException . Nếu bị ném
ExecutException , ngoại lệ cơ bản có thể được lấy bằng getCause .
Có một số cách để tạo ra một Tương lai để mô tả một nhiệm vụ. các trình
tất cả các phương thức trong ExecutorService đều trả về Tương lai , để bạn có thể gửi Runn-
thể hoặc một Callable đến một chấp hành viên và lấy lại một tương lai có thể được sử dụng để
lấy kết quả hoặc hủy tác vụ Bạn cũng có thể khởi tạo một cách rõ ràng một Fut-
ureTask cho một Runnable hoặc Callable nhất định . (Vì FutureTask thực hiện
Runnable , nó có thể được gửi đến một Executor để thực hiện hoặc thực hiện trực tiếp
bằng cách gọi phương thức chạy của nó .)
Kể từ Java 6, các triển khai ExecutorService có thể ghi đè newTaskFor trong
AbstractExecutorService để kiểm soát khởi tạo Tương lai tương ứng
đến một Callable hoặc Runnable được gửi . Việc thực hiện mặc định chỉ tạo ra một
FutureTask mới , như trong Liệt kê 6.12.
được bảo vệ <T> RunnableFuture <T> newTaskFor (tác vụ <T> có thể gọi)
trả lại FutureTask mới <T> (tác vụ);
}
Liệt kê 6.12. Cài đặt mặc định của newTaskFor trong ThreadPoolExecutor .
Gửi một Runnable hoặc Callable một Executor tạo thành một publica- an toàn
tion (xem Phần 3.5) của Runnable hoặc Callable từ chuỗi gửi đến
chủ đề mà cuối cùng sẽ thực hiện nhiệm vụ. Tương tự, đặt giá trị kết quả
cho một tương lai tạo thành một ấn phẩm an toàn về kết quả từ chuỗi trong đó
nó đã được tính toán cho bất kỳ chủ đề nào lấy nó thông qua get .

Trang 37
6.3. Tìm song song có thể khai thác
127
6.3.3 Ví dụ: trình kết xuất trang với Tương lai
Là bước đầu tiên để làm cho trình kết xuất trang trở nên đồng thời hơn, hãy chia nó
thành hai nhiệm vụ, một nhiệm vụ hiển thị văn bản và một nhiệm vụ tải xuống tất cả các hình ảnh.
(Bởi vì một tác vụ chủ yếu bị ràng buộc bởi CPU và phần còn lại chủ yếu là ràng buộc I / O, nên
Cách tiếp cận có thể mang lại cải tiến ngay cả trên các hệ thống CPU đơn.)
Callable và Future có thể giúp chúng ta thể hiện sự tương tác giữa các coop này
nhiệm vụ dựng lên. Trong FutureRenderer trong Liệt kê 6.13, chúng tôi tạo một Callable để down-
tải tất cả các hình ảnh và gửi nó đến ExecutorService . Điều này trả về một tương lai
mô tả thực thi nhiệm vụ; khi nhiệm vụ chính đạt đến điểm
cần những hình ảnh, nó chờ kết quả bằng cách gọi cho Future.get . Nếu chúng ta may mắn,
kết quả sẽ sẵn sàng vào lúc chúng tôi yêu cầu; nếu không, ít nhất chúng ta đã có một cái đầu
bắt đầu tải hình ảnh
Bản chất phụ thuộc vào trạng thái của get có nghĩa là người gọi không cần phải biết
về trạng thái của nhiệm vụ và các thuộc tính xuất bản an toàn của việc gửi nhiệm vụ
và truy xuất kết quả làm cho phương pháp này an toàn chủ đề. Mã xử lý ngoại lệ
xung quanh Future.get giải quyết hai vấn đề có thể xảy ra: đó là nhiệm vụ
tered một ngoại lệ , hoặc tiểu trình đang gọi get bị gián đoạn trước khi kết quả
Đã có sẵn. (Xem Phần 5.5.2 và 5.4.)
FutureRenderer cho phép văn bản được hiển thị đồng thời với tải xuống-
ing dữ liệu hình ảnh. Khi tất cả các hình ảnh được tải xuống, chúng được hiển thị lên
trang. Đây là một cải tiến trong đó người dùng thấy kết quả nhanh chóng và nó
khai thác một số song song, nhưng chúng ta có thể làm tốt hơn đáng kể. Không cần
người dùng chờ đợi tất cả các hình ảnh được tải xuống; họ có lẽ sẽ thích
xem hình ảnh cá nhân được vẽ khi chúng trở nên có sẵn.
6.3.4 Hạn chế của việc song song hóa các nhiệm vụ không đồng nhất
Trong ví dụ trước, chúng tôi đã cố gắng thực hiện hai loại nhiệm vụ khác nhau song song
tải hình ảnh và kết xuất trang. Nhưng đạt được đáng kể
cải tiến định dạng bằng cách cố gắng song song hóa các nhiệm vụ không đồng nhất tuần tự
có thể là khó khăn
Hai người có thể phân chia công việc dọn dẹp các món ăn tối khá hiệu quả:
Một người rửa trong khi người kia khô. Tuy nhiên, chỉ định một loại khác
nhiệm vụ cho mỗi công nhân không có quy mô tốt; nếu nhiều người xuất hiện, nó không phải là
rõ ràng làm thế nào họ có thể giúp đỡ mà không cản trở hoặc tái cấu trúc đáng kể-
ing phân công lao động. Không tìm thấy sự song song mịn hơn giữa các tương tự
nhiệm vụ, cách tiếp cận này sẽ mang lại lợi nhuận giảm dần.
Một vấn đề nữa với việc phân chia các nhiệm vụ không đồng nhất giữa nhiều công nhân
là các nhiệm vụ có thể có kích thước khác nhau. Nếu bạn phân chia nhiệm vụ A và B giữa
hai công nhân nhưng A mất gấp mười lần B , bạn chỉ tăng tốc tổng cộng
xử lý 9%. Cuối cùng, phân chia một nhiệm vụ giữa nhiều công nhân luôn liên quan đến
một số lượng phối hợp trên cao; để phân chia có giá trị, điều này
chi phí phải được bù nhiều hơn nhờ cải thiện năng suất do
song song.
FutureRenderer sử dụng hai tác vụ: một để hiển thị văn bản và một để tải xuống-
ing hình ảnh. Nếu kết xuất văn bản nhanh hơn nhiều so với tải xuống hình ảnh,

Trang 38
128
Chương 6. Thi hành nhiệm vụ
lớp học công cộng FutureRenderer {
riêng cuối cùng ExecutorService execor = ...;
void renderPage (nguồn CharSequence) {
Danh sách cuối cùng <ImageInfo> imageInfos = scanForImageInfo (nguồn);
Có thể gọi <Danh sách <ImageData >> task =
Có thể gọi mới <Danh sách <ImageData >> () {
Danh sách công khai <ImageData> gọi () {
Danh sách kết quả <ImageData>
= ArrayList mới <ImageData> ();
cho (ImageInfo imageInfo: imageInfos)
result.add (imageInfo.doadImage ());
kết quả trả về;
}
};
Tương lai <Danh sách <ImageData >> tương lai = execor.submit (tác vụ);
renderText (nguồn);
thử {
Danh sách <ImageData> imageData = tương lai.get ();
cho (dữ liệu ImageData: imageData)
renderImage (dữ liệu);
} bắt (Interrupttedception e) {
// Xác nhận lại trạng thái bị gián đoạn của luồng
Thread.cienThread (). Interrupt ();
// Chúng tôi không cần kết quả, vì vậy hãy hủy tác vụ
tương lai.cattery (đúng);
} Catch (ExecutException e) {
throw launderThrowable (e.getCause ());
}
}
}
Liệt kê 6.13. Đang chờ tải hình ảnh với Tương lai .

Trang 39
6.3. Tìm song song có thể khai thác
129
như là hoàn toàn có thể, hiệu suất kết quả không khác nhiều so với
phiên bản tuần tự, nhưng mã phức tạp hơn nhiều. Và điều tốt nhất chúng ta có thể làm
với hai luồng là tốc độ tăng lên theo hệ số hai. Do đó, cố gắng tăng
đồng thời bằng cách song song các hoạt động không đồng nhất có thể là rất nhiều công việc, và
có giới hạn về số lượng đồng thời bổ sung mà bạn có thể thoát khỏi nó. (Xem
Phần 11.4.2 và 11.4.3 cho một ví dụ khác về hiện tượng tương tự.)
Phần thưởng hiệu suất thực tế của việc phân chia khối lượng công việc của chương trình thành các nhiệm
vụ
đến khi có một số lượng lớn các nhiệm vụ độc lập, đồng nhất
có thể được xử lý đồng thời.
6.3.5 Hoàn thành Dịch vụ : Nhân viên điều hành gặp BlockingQueue
Nếu bạn có một loạt các tính toán để gửi cho Executor và bạn muốn
để lấy kết quả của họ khi chúng có sẵn, bạn có thể giữ lại Tương lai
liên kết với từng nhiệm vụ và liên tục thăm dò ý kiến để hoàn thành bằng cách gọi get với
thời gian chờ bằng không. Điều này là có thể, nhưng tẻ nhạt. May mắn thay, có một cách tốt hơn:
một dịch vụ hoàn thành .
CompleteionService kết hợp chức năng của Executor và Block-
ingueue . Bạn có thể gửi Callable nhiệm vụ cho nó để thực hiện và sử dụng queue-
như các phương thức lấy và thăm dò để lấy kết quả đã hoàn thành, được đóng gói dưới dạng Tương lai ,
khi chúng trở nên có sẵn. ExecutorCompletionService thực hiện Hoàn thành-
Dịch vụ , ủy thác tính toán cho một Chấp hành viên .
Việc triển khai ExecutorCompletionService khá đơn giản.
Hàm tạo tạo một BlockingQueue để giữ các kết quả đã hoàn thành. Tương lai-
Tác vụ có một phương thức thực hiện được gọi khi tính toán hoàn thành. Khi một
tác vụ được gửi, nó được gói bằng QueueingFuture , một lớp con của FutureTask
ghi đè được thực hiện để đặt kết quả trên BlockingQueue , như trong Liệt kê
6.14. Các phương thức lấy và thăm dò ủy thác cho BlockingQueue , chặn nếu
kết quả vẫn chưa có.
lớp riêng QueueingFuture <V> mở rộng FutureTask <V> {
QueueingFuture (Có thể gọi <V> c) {super (c); }
QueueingFuture (Runnable t, V r) {super (t, r); }
được bảo vệ void thực hiện () {
xongQueue.add (này);
}
}
Liệt kê 6.14. Lớp QueueingFuture được sử dụng bởi ExecutorCompletionService .

Trang 40
130
Chương 6. Thi hành nhiệm vụ
6.3.6 Ví dụ: trình kết xuất trang với CompleteionService
Chúng tôi có thể sử dụng Dịch vụ Hoàn thành để cải thiện hiệu suất của việc đổi trang
derer theo hai cách: tổng thời gian chạy ngắn hơn và khả năng đáp ứng được cải thiện. Chúng tôi
có thể tạo một tác vụ riêng để tải xuống từng ảnh và thực hiện chúng trong
nhóm luồng, biến tải xuống tuần tự thành một chuỗi song song: điều này làm giảm
lượng thời gian để tải xuống tất cả các hình ảnh. Và bằng cách lấy kết quả từ
CompleteionService và hiển thị từng hình ảnh ngay khi có sẵn, chúng tôi có thể
cung cấp cho người dùng một giao diện người dùng năng động và nhạy bén hơn. Việc thực hiện này
được hiển thị trong Trình kết xuất trong Liệt kê 6.15.
Trình kết xuất lớp công khai {
tư nhân thực thi cuối cùng ExecutorService;
Trình kết xuất (ExecutorService execor) {this.executor = execor; }
void renderPage (nguồn CharSequence) {
Danh sách <ImageInfo> thông tin = scanForImageInfo (nguồn);
CompleteionService <ImageData> xongService =
ExecutorCompletionService mới <ImageData> (người thực thi);
cho (hình ảnh cuối cùng ImageInfo: thông tin)
completionService.submit (Callable mới <imageData> () {
cuộc gọi ImageData công khai () {
trả về imageInfo.doadImage ();
}
});
renderText (nguồn);
thử {
for (int t = 0, n = info.size (); t <n; t ++) {
Tương lai <ImageData> f = xongService.take () ;
ImageData imageData = f.get ();
renderImage (imageData);
}
} bắt (Interrupttedception e) {
Thread.cienThread (). Interrupt ();
} Catch (ExecutException e) {
throw launderThrowable (e.getCause ());
}
}
}
Liệt kê 6.15. Sử dụng CompleteionService để kết xuất các thành phần trang khi chúng trở thành
có sẵn.
Nhiều ExecutorCompletionService có thể chia sẻ một Executor , vì vậy nó là

Trang 41
6.3. Tìm song song có thể khai thác
131
hoàn toàn hợp lý để tạo một ExecutorCompletionService riêng tư cho một
tính toán cụ thể trong khi chia sẻ một Executor chung . Khi được sử dụng trong này
cách, một Dịch vụ Hoàn thành hoạt động như một công cụ xử lý cho một loạt các tính toán trong nhiều
giống như cách mà Tương lai đóng vai trò là tay cầm cho một tính toán đơn lẻ. Bằng cách nhớ
bering có bao nhiêu nhiệm vụ đã được gửi đến CompleteionService và đếm
Có bao nhiêu kết quả hoàn thành được lấy, bạn có thể biết khi nào tất cả các kết quả cho
một lô nhất định đã được truy xuất, ngay cả khi bạn sử dụng Executor được chia sẻ .
6.3.7 Đặt giới hạn thời gian cho các nhiệm vụ
Đôi khi, nếu một hoạt động không hoàn thành trong một khoảng thời gian nhất định,
kết quả là không còn cần thiết và các hoạt động có thể bị bỏ rơi. Ví dụ: một trang web
ứng dụng có thể tìm nạp quảng cáo từ máy chủ quảng cáo bên ngoài, nhưng nếu quảng cáo
không có sẵn trong vòng hai giây, thay vào đó nó sẽ hiển thị một quảng cáo mặc định
sự không có sẵn của quảng cáo không làm suy yếu các yêu cầu đáp ứng của trang web.
Tương tự, một trang web cổng thông tin có thể tìm nạp dữ liệu song song từ nhiều nguồn dữ liệu, nhưng
có thể sẵn sàng đợi chỉ một khoảng thời gian nhất định để dữ liệu có sẵn
trước khi kết xuất trang mà không có nó.
Thách thức chính trong việc thực hiện các nhiệm vụ trong một ngân sách thời gian là thực hiện
chắc chắn rằng bạn không đợi lâu hơn ngân sách thời gian để có câu trả lời hoặc tìm
ra rằng một là không đến. Phiên bản hẹn giờ của Future.get hỗ trợ điều này
yêu cầu: nó trả về ngay khi kết quả sẵn sàng, nhưng ném TimeoutEx805-
tion nếu kết quả không sẵn sàng trong khoảng thời gian chờ.
Một vấn đề thứ yếu khi sử dụng các tác vụ được định thời là dừng chúng khi chúng chạy
hết thời gian, vì vậy họ không lãng phí tài nguyên máy tính bằng cách tiếp tục tính toán
một kết quả sẽ không được sử dụng. Điều này có thể được thực hiện bằng cách hoàn thành nhiệm vụ
quản lý ngân sách thời gian của riêng mình và hủy bỏ nếu hết thời gian hoặc hủy bỏ
nhiệm vụ nếu hết thời gian. Một lần nữa, Tương lai có thể giúp đỡ; nếu một thời gian được hoàn thành
với
một TimeoutException , bạn có thể hủy tác vụ thông qua Tương lai . Nếu nhiệm vụ là
được viết để có thể hủy bỏ (xem Chương 7), nó có thể được chấm dứt sớm để không
tiêu tốn tài nguyên quá mức. Kỹ thuật này được sử dụng trong Liệt kê 6.13 và 6.16.
Liệt kê 6.16 cho thấy một ứng dụng điển hình của một Future.get được định thời gian . Nó tạo ra
một trang web tổng hợp có chứa nội dung được yêu cầu cộng với quảng cáo
lấy từ một máy chủ quảng cáo. Nó gửi nhiệm vụ tìm nạp quảng cáo cho người thi hành, com-
tính toán phần còn lại của nội dung trang và sau đó chờ quảng cáo cho đến khi có ngân sách thời gian
chạy ra ngoài. 8 Nếu get lần ra, nó hủy bỏ 9 nhiệm vụ quảng cáo tìm nạp và sử dụng một mặc định
quảng cáo thay thế.
6.3.8 Ví dụ: cổng thông tin đặt chỗ du lịch
Cách tiếp cận ngân sách thời gian trong phần trước có thể dễ dàng khái quát hóa
một số lượng nhiệm vụ tùy ý. Xem xét một cổng đặt phòng du lịch: người dùng en-
8. Thời gian chờ trôi qua để có được tính bằng cách trừ thời gian hiện tại khỏi thời hạn; cái này có thể
trong thực tế mang lại một số âm, nhưng tất cả các phương thức tính thời gian trong java.util.conc hiện xử
lý âm
thời gian chờ là 0, vì vậy không cần thêm mã để xử lý trường hợp này.
9. Tham số thực sự cho Future.cattery có nghĩa là luồng tác vụ có thể bị gián đoạn nếu tác vụ là
hiện đang chạy; xem Chương 7.

Trang 42
132
Chương 6. Thi hành nhiệm vụ
Trang renderPageWithAd () ném Interrupttedception {
endNanos dài = System.nanoTime () + TIME_BUDGET;
Tương lai <Quảng cáo> f = exec.submit (FetchAdTask ()) mới trong tương lai;
// Kết xuất trang trong khi chờ quảng cáo
Trang trang = renderPageBody ();
Quảng cáo quảng cáo;
thử {
// Chỉ chờ ngân sách thời gian còn lại
thời gian dàiLeft = endNanos - System.nanoTime ();
quảng cáo = f.get (timeLeft, NANOSECONDS);
} Catch (ExecutException e) {
quảng cáo = DEFAULT_AD;
} bắt (TimeoutException e) {
quảng cáo = DEFAULT_AD;
f.cattery (đúng);
}
page.setAd (quảng cáo);
trang trả về;
}
Liệt kê 6.16. Lấy một quảng cáo với ngân sách thời gian.
yêu cầu ngày đi và yêu cầu và cổng thông tin tìm nạp và hiển thị giá thầu từ
một số hãng hàng không, khách sạn hoặc công ty cho thuê xe. Tùy thuộc vào com-
pany, tìm nạp giá thầu có thể liên quan đến việc gọi một dịch vụ web, tư vấn cơ sở dữ liệu,
thực hiện giao dịch EDI hoặc một số cơ chế khác. Thay vì có
thời gian phản hồi cho trang được điều khiển bởi phản hồi chậm nhất, có thể tốt hơn
chỉ trình bày thông tin có sẵn trong một ngân sách thời gian nhất định. Để chứng minh
Những người không phản hồi kịp thời, trang có thể bỏ qua chúng hoàn toàn hoặc
hiển thị một trình giữ chỗ, chẳng hạn như không nghe thấy từ Air Java.
Tìm nạp giá thầu từ một công ty độc lập với tìm nạp giá thầu từ một-
khác, do đó, tìm nạp một giá thầu là một ranh giới nhiệm vụ hợp lý cho phép truy xuất giá thầu
tiến hành đồng thời. Nó sẽ đủ dễ dàng để tạo n nhiệm vụ, gửi chúng
vào nhóm luồng, giữ lại các Tương lai và sử dụng thời gian nhận để lấy từng kết quả
tuần tự thông qua Tương lai của nó , nhưng có một cách thậm chí còn dễ dàng hơn nữa .
Liệt kê 6.17 sử dụng phiên bản hẹn giờ của invokeAll để gửi nhiều tác vụ tới
một ExecutorService và lấy kết quả. Các invokeAll phương pháp mất
tập hợp các nhiệm vụ và trả về một bộ sưu tập của Tương lai . Hai bộ sưu tập có
cấu trúc giống hệt nhau; invokeTất thêm các Tương lai vào bộ sưu tập được trả về trong
thứ tự được áp đặt bởi iterator của bộ sưu tập tác vụ, do đó cho phép người gọi liên kết
một tương lai với Callable mà nó đại diện. Phiên bản hẹn giờ của invoke ALL sẽ
trở lại khi tất cả các tác vụ đã hoàn thành, chuỗi cuộc gọi bị gián đoạn hoặc
thời gian chờ hết hạn Bất kỳ nhiệm vụ nào không hoàn thành khi hết thời gian
bị hủy bỏ. Khi trở về từ invoke ALL , mỗi tác vụ sẽ hoàn thành
bình thường hoặc đã bị hủy bỏ; mã máy khách có thể gọi get hoặc isCancelling để tìm

Trang 43
6.3. Tìm song song có thể khai thác
133
ra cái nào
Tóm lược
Cấu trúc các ứng dụng xung quanh việc thực thi các tác vụ có thể đơn giản hóa sự phát triển
và tạo điều kiện đồng thời. Khung Executor cho phép bạn tách rời
nhiệm vụ gửi từ chính sách thực thi và hỗ trợ nhiều loại thực thi
chính sách; Bất cứ khi nào bạn thấy mình tạo chủ đề để thực hiện các nhiệm vụ, hãy xem xét
sử dụng một Executor thay thế. Để tối đa hóa lợi ích của việc phân hủy một applica-
vào các nhiệm vụ, bạn phải xác định ranh giới nhiệm vụ hợp lý. Trong một số ứng dụng,
ranh giới nhiệm vụ rõ ràng hoạt động tốt, trong khi ở những người khác một số phân tích có thể là
cần thiết để khám phá song song khai thác hạt mịn hơn.

Trang 44
134
Chương 6. Thi hành nhiệm vụ
lớp riêng quoteTask thực hiện có thể gọi được <TravelQuote> {
công ty du lịch tư nhân cuối cùng;
cuối cùng riêng tư TravelInfo TravelInfo;
...
cuộc gọi TravelQuote công khai () ném Ngoại lệ {
trả lại công ty.solicitQuote (TravelInfo);
}
}
Danh sách công khai <TravelQuote> getRopedTravelQuotes (
TravelInfo TravelInfo, Đặt các công ty <TravelCompany>,
Bảng so sánh <TravelQuote> xếp hạng, thời gian dài, đơn vị TimeUnit)
ném Interrupttedception {
Liệt kê <quoteTask> tác vụ = new ArrayList <quoteTask> ();
cho (công ty TravelCompany: công ty)
task.add (trích dẫn mới (công ty, TravelInfo));
Danh sách <Tương lai <TravelQuote >> tương lai =
exec.invoke ALL (nhiệm vụ, thời gian, đơn vị);
Danh sách <TravelQuote> báo giá =
ArrayList mới <TravelQuote> (task.size ());
Trình lặp <quoteTask> taskIter = task.iterator ();
cho (Tương lai <TravelQuote> f: tương lai) {
Nhiệm vụ quoteTask = taskIter.next ();
thử {
trích dẫn.add (f.get ());
} Catch (ExecutException e) {
trích dẫn.add (task.getFailureQuote (e.getCause ()));
} bắt (CancellingException e) {
trích dẫn.add (task.getTimeoutQuote (e));
}
}
Bộ sưu tập.sort (trích dẫn, xếp hạng);
báo giá trả lại;
}
Liệt kê 6.17. Yêu cầu báo giá du lịch theo một ngân sách thời gian.

Trang 45
Trang này cố ý để trống

Trang 46
Mục lục
Biểu tượng
Hoạt động 64 bit
bản chất không gây dị ứng của; 36
Một
Vấn đề ABA ; 336
chấm dứt chủ đề bất thường
sự điều khiển; 161 bóng163
hủy bỏ chính sách bão hòa ; 174
Xem thêm vòng đời; chấm dứt;
tắt máy đột ngột
hạn chế; 158 Con161
kích hoạt cho; 164
tắt máy duyên dáng; 153
Tóm tắtExecutorService
sử dụng đại diện nhiệm vụ; 126
trừu tượng
Xem mô hình / mô hình; đại diện-
sự;
AbstractQueuedSyn Syncizer
Xem khung AQS;
truy cập
Xem thêm đóng gói; chia sẻ; thị giác
khả năng sinh sản;
độc quyền
và các bộ sưu tập đồng thời; 86
chính trực
sử dụng thuật toán nonblocking; 319
trạng thái đột biến
tầm quan trọng của việc phối hợp; 110
tài nguyên từ xa
như nhiệm vụ GUI chạy dài; 195
nối tiếp
Ví dụ WorkerThread ; 227 li
so với tuần tự hóa đối tượng; 27 fn
vai trò tầm nhìn trong; 33
AccessControlContext
xử lý chủ đề tùy chỉnh nhà máy; 177
mua lại ổ khóa
Xem khóa, mua lại;
hành động
Xem thêm hành động ghép; bao cao su
tion, vị ngữ; kiểm soát dòng chảy;
nhiệm vụ;
rào chắn; 99
Đặc điểm kỹ thuật JMM; 339 Tiếng342
thính giả; 195 195197
hoạt động
Xem thêm nhiệm vụ;
hủy bỏ; 135 , 135150150
nhiệm vụ như đại diện của; 113
giam cầm chủ đề ad-hoc ; 43
Xem thêm bị giam cầm;
thuật toán
Xem thêm các mẫu thiết kế; thành ngữ; đại diện
oán giận;
so sánh hiệu suất; 263 thuật264
vai trò thiết kế của đại diện; 104
không khóa; 329
Hàng đợi không chặn Michael-Scott;
332
không chặn; 319 , 329 , 329
tầm quan trọng của backoff cho; 231 fn
đồng bộ hóa; 319
Đồng bộ hóa giá trị ; 174 fn
lặp song song
sử dụng rào cản trong; 99
đệ quy
song song; 181
Treiber
ngăn xếp ngăn chặn; 331 li
ăn cắp công việc
deques và; 92
phương pháp người ngoài hành tinh ; 40
Xem thêm hành vi mã không tin cậy;
rủi ro bế tắc do; 211
rủi ro xuất bản; 40
359

Trang 47
360
Mục lục
phân bổ
lợi thế so với đồng bộ hóa; 242
đối tượng bất biến và; 48 fn
sử dụng nhóm đối tượng
nhược điểm của; 241
lợi thế về khả năng mở rộng; 263
Luật của Amdahl ; 225 con229
Xem thêm đồng thời / đồng thời;
hiệu suất; tài nguyên);
thông lượng; sử dụng;
khóa phạm vi lợi thế giảm; 234
ứng dụng định tính của; 227
phân tích
Xem thêm thiết bị; đo lường-
tinh thần; công cụ phân tích tĩnh;
bế tắc
sử dụng bãi chứa ren; 216 Tua217
bỏ trốn; 230
cho song song khai thác; 123 ăn133
tranh chấp khóa
sử dụng bãi chứa ren; 240
hiệu suất; 221 Nền245
chú thích ; 353
Xem thêm tài liệu;
cho tài liệu đồng thời; 6
@ GuardedBy ; 28, 354
chính sách đồng bộ hóa tài liệu-
sử dụng đề cập; 75
@Immutable ; 353
@NotThreadSafe ; 353
@ThreadSafe ; 353
AOP (lập trình hướng theo khía cạnh)
trong thử nghiệm; 259, 273
các ứng dụng)
Xem thêm các khung (s); dịch vụ;
công cụ;
các đối tượng có phạm vi
mối quan tâm an toàn chủ đề; 10
các khung và ThreadLocal; 46
GUI; 189 Hậu 202
mối quan tâm an toàn chủ đề; 10 trận11
song song
phân rã nhiệm vụ; 113
tắt
và hủy bỏ nhiệm vụ; 136
AQS ( AbstractQueuedSyn Syncizer )
khung ; 308, 311 Từ317
sử dụng giao thức thoát; 306
Triển khai FutureTask
sử dụng cõng; 342
ArrayBlockingQueue ; 89
như ví dụ đệm giới hạn; 292
lợi thế hiệu suất hơn
BoundedBuffer ; 263
ArrayDeque ; 92
mảng
Xem thêm các bộ sưu tập; cấu trúc dữ liệu
ture (s);
biến nguyên tử; 325
nhiệm vụ hai bên không đối xứng
Quản lý trao đổi của; 101
không đồng bộ / không đồng bộ
sự kiện, xử lý; 4
I / O và khối không ngắt-
ing; 148
tuần tự so với.; 2
nhiệm vụ
thi công, khung thi công
sử dụng; 117
Xử lý FutureTask ; 95 Cung98
biến nguyên tử ; 319
và khóa tranh chấp; 239 con240
các lớp học; 324 322329
khóa so với.; 326 322329
chiến lược sử dụng; 34
biến số biến động so với.; 39, 324
nguyên tử / nguyên tử ; 22
Xem thêm bất biến (s); đồng bộ-
sự; hiển thị;
Hoạt động 64 bit
bản chất không gây dị ứng của; 36
và hành động ghép; 22 trận23
và bất biến đa biến; 57,
67 Cung68
và tái cấu trúc cuộc gọi mở; 213
và tắt dịch vụ; 153
và các hạn chế chuyển đổi trạng thái; 56
vấn đề lưu trữ; 24 con25
hỗ trợ khóa phía khách hàng cho; 80
cập nhật trường; 335 Điện336
đối tượng bất biến sử dụng cho; 48
trong thiết kế triển khai bộ đệm; 106
thực thi khóa nội tại của; 25 con26
thua
nguy cơ giảm phạm vi khóa; 234
Bản đồ hoạt động; 86
đặt-nếu-vắng mặt; 71 kho72
thống kê thu thập móc sử dụng; 179
vấn đề an toàn chủ đề
trong các dịch vụ có nhà nước; 19 trận23

Trang 48
Mục lục
361
Nguyên tửBoolean ; 325
Nguyên tử ; 324
sử dụng thuật toán nonblocking; 319
tạo số ngẫu nhiên bằng cách sử dụng;
327 li
Nguyên tửLong ; 325
Nguyên tử ; 325
sử dụng thuật toán nonblocking; 319
sử dụng ấn phẩm an toàn; 52
AtomicReferenceFieldUpdater ; 335
kiểm toán (ing)
Xem thêm thiết bị;
công cụ kiểm toán (ing) ; 28 fn
AWT (Bộ công cụ cửa sổ trừu tượng)
Xem thêm GUI;
sử dụng chủ đề; 9
mối quan tâm an toàn và; 10 trận11
B
rút lui
và các thuật toán không chặn; 231 fn
xà lan ; 283
Xem thêm sự công bằng; đặt hàng; đồng bộ-
nation;
và khóa đọc-ghi; 287
lợi thế hiệu suất của; 284
rào cản ; 99 , 99
Xem thêm chốt (es); ngữ nghĩa; đồng bộ
đồng hồ bấm giờ;
hẹn giờ dựa trên cơ sở; 260 con261
hoạt động; 99
ký ức; 230 , 338
điểm; 99
hành vi
Xem thêm các hoạt động; nhiệm vụ;
Thiên kiến
Xem thử nghiệm, cạm bẫy;
thư mục ; 355 hà357
chốt nhị phân ; 304
Dựa trên AQS; 313
semaphore nhị phân
sử dụng mutex; 99
Bloch, Joshua
(tài liệu tham khảo); 69
khối (ing) ; 92
bộ sưu tập giới hạn
quản lý semaphore của; 99
thử nghiệm; 248
tác động chuyển đổi bối cảnh của; 230
phương pháp gián đoạn và; 92 trận94
phương pháp xử lý gián đoạn; 138
phương pháp
và gián đoạn; 143
không ngắt quãng; 1471616150
hoạt động
thử nghiệm; 250 con252
tác động kích thước hồ bơi chủ đề; 170
xếp hàng; 87 Cung94
Xem thêm Semaphore ;
và quản lý nhóm luồng;
173
hủy bỏ, vấn đề; 138
hủy bỏ, giải pháp; 140
Chức năng thực thi com-
bị ràng buộc với; 129
mô hình sản xuất-tiêu dùng và;
87 Cung92
chờ đợi quay vòng; 232
hành động phụ thuộc vào nhà nước; 291
và bỏ phiếu; 295 bóng296
và ngủ; 295 bóng296
điều kiện xếp hàng; 296
kết cấu; 292 li
chủ đề, chi phí của; 232
chờ đợi
hẹn giờ so với không giới hạn; 170
ChặnQueue ; 84 Cung85
và các điều kiện tiên quyết dựa trên nhà nước; 57
sử dụng ấn phẩm an toàn; 52
sử dụng hồ bơi của; 173
ràng buộc (ed)
Xem thêm các hạn chế; đóng gói;
chặn bộ sưu tập
quản lý semaphore của; 99
bộ đệm
chặn hoạt động; 292
kiểm tra khả năng mở rộng; 261
xác định kích thước; 261
hàng đợi
và mô hình sản xuất-tiêu dùng;
88
chính sách bão hòa; 174 mỏ175
sử dụng hồ bơi chủ đề; 172
sử dụng hồ bơi của; 173
nguồn; 221
ranh giới
Xem thêm đóng gói;
bài tập; 113
phân tích cho song song; 123 ăn133
chương trình đa luồng bị hỏng
chiến lược sửa chữa; 16

Trang 49
362
Mục lục
BrokenBarrierException
sử dụng thuật toán lặp song song; 99
bộ đệm
Xem thêm bộ đệm / bộ đệm;
giới hạn
chặn opera phụ thuộc vào nhà nước-
tions với; 292
kiểm tra khả năng mở rộng; 261
xác định kích thước; 261
Ví dụ BoundedBuffer ; 249 li
điều kiện sử dụng hàng đợi; 297
phát triển trường hợp thử nghiệm cho; 248
Ví dụ BoundedBufferTest ; 250 li
năng lực
kiểm tra so sánh; 261
thử nghiệm; 248
mẫu lỗi (s) ; 271, 271
Xem thêm gỡ lỗi; mẫu thiết kế;
thử nghiệm;
máy dò; 271
bận rộn chờ đợi ; 295
Xem thêm quay vòng chờ đợi;
C
bộ nhớ cache / bộ nhớ đệm
Xem thêm hiệu suất;
vấn đề nguyên tử; 24 con25
xả nước
và rào cản bộ nhớ; 230
vấn đề thực hiện
nguyên tử / nguyên tử; 106
sự an toàn; 104
nhớ
như chi phí chuyển đổi bối cảnh; 229
kết quả
xây dựng; 101 Gian109
Có thể gọi được ; 126 li
Sử dụng FutureTask ; 95
khả năng xử lý kết quả; 125
gọi lại
sử dụng thử nghiệm; 256 Tua259
chính sách bão hòa của người gọi ; 174
hủy bỏ ; 135150150
Xem thêm gián đoạn; vòng đời; đóng cửa
xuống;
Hoạt động; 135
như hình thức hoàn thành; 95
Sử dụng trong tương lai ; 145 Tiếng147
thu thập khóa gián đoạn; 279
281
mối quan hệ gián đoạn đến; 138
nhiệm vụ GUI chạy dài; 197 Gian198
không chuẩn
đóng gói của; 148 Bếp150
lý do và chiến lược; 1471616150
điểm; 140
chính sách; 136
và chính sách gián đoạn chủ đề;
141
lợi thế gián đoạn như im-
chiến lược mạ vàng; 140
lý do; 136
tắt máy và; 135 con166
bài tập
Xử lý thi công ; 125
trong xử lý công việc đúng thời gian; 131
khóa thời gian sử dụng; 279
Hủy bỏ ngoại lệ
Callable xử lý; 98
Hướng dẫn CAS (so sánh và trao đổi) ;
321
Xem thêm nguyên tử / nguyên tử, biến;
Hỗ trợ lớp Java trong Java 5. 0 ; 324
sử dụng thuật toán khóa miễn phí; 329
sử dụng thuật toán nonblocking; 319, 329
hiệu ứng tầng
của các yêu cầu an toàn chủ đề; 28
Automata di động
sử dụng rào cản để tính toán; 101
kiểm tra hành động sau đó hành động
Xem thêm hành động ghép;
như điều kiện cuộc đua gây ra; 21
xử lý biến nguyên tử; 325
hành động ghép
trong hoạt động thu gom; 79
vấn đề bất biến đa biến; 67 Cung68
vấn đề tắt dịch vụ; 153
trạm kiểm soát
tiểu bang
vấn đề tắt máy; 158
tổng kiểm
sử dụng thử nghiệm an toàn; 253
các lớp học)
như bối cảnh giam cầm; 59
sự mở rộng
chiến lược và rủi ro; 71
với các lớp người trợ giúp; 72 Cung73
bao bọc đồng bộ
hỗ trợ khóa phía khách hàng; 73
an toàn chủ đề
và thành phần đối tượng; 55 Led78

Trang 50
Mục lục
363
dọn dẹp
Xem thêm vòng đời;
và xử lý gián đoạn
bảo vệ tính toàn vẹn dữ liệu; 142
trong chế biến cuối vòng đời; 135
Móc tắt máy JVM sử dụng cho; 164
khách hàng
Xem thêm máy chủ;
yêu cầu
như ranh giới nhiệm vụ tự nhiên; 113
khóa phía khách hàng ; 72 Cung73, 73
Xem thêm khóa (ing);
và hành động ghép; 79 Gian82
và hàng đợi điều kiện; 306
quan hệ mở rộng lớp đến; 73
quản lý lớp học; 150 fn
thô
Xem thêm khóa (ing);
Khóa; 231 , 235 fn , 286
mã xem lại
như chiến lược đảm bảo chất lượng; 271
bộ sưu tập
Xem thêm hashtables; danh sách; bộ (s);
chặn giới hạn
quản lý semaphore của; 99
đồng thời; 84 Cung98
khối xây dựng; 79 Gian110
sao chép
thay thế cho khóa; 83
sử dụng khóa tước; 237
đồng bộ; 79 Gian84
bộ sưu tập đồng thời so với.; 84
Bộ sưu tập.
sử dụng ấn phẩm an toàn; 52
Bộ sưu tập. Đồng bộ hóaXxx
tạo bộ sưu tập đồng bộ; 79
giao tiếp
cơ chế cho; 1
hướng dẫn so sánh và trao đổi (CAS)
Xem CAS;
so sánh
sử dụng hàng đợi theo thứ tự ưu tiên; 89
biên soạn
năng động
và thử nghiệm hiệu suất; 267
268
thay đổi thời gian và đặt hàng
rủi ro an toàn chủ đề; 7
hoàn thành ; 95
Xem thêm vòng đời;
thông báo
của nhiệm vụ GUI chạy dài; 198
dịch vụ
Tương lai ; 129
bài tập
đo lường phương sai thời gian dịch vụ;
264 khó266
sử dụng biến dễ bay hơi với; 39
Dịch vụ hoàn thành
trong ví dụ kết xuất trang; 129
thành phần ; 73
Xem thêm đoàn; đóng gói;
như phần mở rộng chức năng mạnh mẽ
cơ chế; 73
của các đối tượng; 55 Led78
hành động ghép ; 22
Xem thêm nguyên tử / nguyên tử; đồng tình
thuê / đồng thời, collec-
tions; điều kiện chủng tộc;
xử lý nguyên tử của; 22 trận23
quy tắc thiết kế đồng thời vai trò; 110
hỗ trợ thu đồng thời cho; 84
ví dụ về
Xem hoạt động kiểm tra sau đó hành động;
lặp đi lặp lại; dẫn đường; đặt-
hoạt động nếu vắng mặt; đọc-
sửa đổi-viết; loại bỏ-nếu-
hoạt động bình đẳng; thay thế nếu
hoạt động bình đẳng;
trong thực hiện bộ đệm; 106
trong lớp sử dụng đồng bộ
cơ chế xử lý; 79 Gian82
yêu cầu đồng bộ hóa; 29
tính toán
mã chuyên sâu tính toán
tác động đến hành vi khóa; 34
tác động kích thước hồ bơi chủ đề; 170
hoãn lại
vấn đề thiết kế; 125
chủ đề cục bộ
và thử nghiệm hiệu suất; 268
Lập trình đồng thời trong Java ; 42,
57, 59, 87, 94, 95, 98, 99, 101,
124, 201, 211, 279, 282, 304
đồng thời / đồng thời
Xem thêm song song / song song;
sự an toàn; đồng bộ-
tion / đồng bộ ;
và các bộ sưu tập đồng bộ; 84
và độc lập nhiệm vụ; 113
chú thích; 353
tóm tắt lịch sử; 1122
Trang 51
364
Mục lục
khu nhà; 79 Gian110
vấn đề thực hiện bộ đệm; 103
bộ sưu tập; 84 Cung98
Chiến lược khóa đồng thời
lợi thế; 85
gỡ lỗi
chi phí so với tối ưu hiệu suất-
giá trị tion; 224
nguyên lý thiết kế; 110
lỗi
Thấy bế tắc; sống động; cuộc đua
vũ điệu; chết đói;
hạt mịn
và các mô hình dữ liệu an toàn luồng; 201
sửa đổi
bộ sưu tập đồng bộ
chanh với; 82
nhược điểm nhóm đối tượng; 241
nghèo; 30
Phòng ngừa
Xem thêm đơn luồng;
thực thi đơn luồng sử dụng;
172, 177 Tiếng178
lợi thế khóa đọc-ghi; 286
thử nghiệm; 247 Mây274
Bản đồ đồng thời ; 84 Cung86
lợi thế hiệu suất của; 242
Đồng thờiLinkedDeque ; 92
Đồng thờiLinkedQueue ; 84 Cung85
thuật toán; 319
sử dụng phản xạ; 335
sử dụng ấn phẩm an toàn; 52
Bản đồ đồng thời ; 84, 87 li
sử dụng ấn phẩm an toàn; 52
Đồng thờiModificationException
tránh né; 85
sử dụng các trình vòng lặp không nhanh; 82 Gian83
Đồng thờiSkipListMap ; 85
Đồng thờiSkipListSet ; 85
Điều kiện ; 307 li
sử dụng đối tượng điều kiện rõ ràng; 306
hàng đợi điều kiện nội tại vs.
cân nhắc hiệu suất; 308
điều kiện
Thuộc tính; 299 , 299
khóa và điều kiện biến Rela-
chiến hạm; 308
xếp hàng; 297
Xem thêm đồng bộ hóa;
Hỗ trợ AQS cho; 312
chặn opera phụ thuộc vào nhà nước-
sử dụng tions; 296
rõ ràng; 306
nội tại; 297
nội tại, nhược điểm của; 306
sử dụng; 298
biến
rõ ràng; 306
chờ đợi
và vị ngữ điều kiện; 299
hình thức kinh điển; 301 li
gián đoạn, như tính năng của Con-
dition ; 307
không bị gián đoạn, như tính năng của
Điều kiện ; 307
thức dậy từ, điều kiện
xử lý hàng đợi; 300
có điều kiện
Xem thêm chặn / chặn;
thông báo; 303
như tối ưu hóa; 303
vấn đề an toàn phân lớp; 304
sử dụng; 304 li
hoạt động đọc-sửa đổi-nhà văn
hỗ trợ biến nguyên tử cho; 325
cấu hình
của ThreadPoolExecutor ; 171 Từ179
tạo chủ đề
và các nhà máy sợi; 175
hồ bơi
thao tác sau thi công;
177 Con179
giam cầm
Xem thêm đóng gói; Độc thân-
chủ đề (ed);
ví dụ; 59 , 58 Quảng60
cây rơm; 44 , 44 Tiếng45
chủ đề; 42 , 42
đặc biệt; 43
và chính sách thực thi; 167
trong đu quay; 191 Gian192
vai trò, chính sách đồng bộ hóa
sự chỉ rõ; 56
nối tiếp; 90 , 90 bóng92
khung GUI đơn luồng
sử dụng; 190
Tiêu đề ; 45 con46
Kết nối
sử dụng chủ đề giam cầm; 43
Sử dụng biến ThreadLocal với; 45

Trang 52
Mục lục
365
nhất quán / nhất quán
sao chép kịp thời vs.
như thiết kế đánh đổi; 62
xem dữ liệu kịp thời so với
như thiết kế đánh đổi; 66, 70
khóa đặt hàng
và tránh bế tắc; 206
lặp lặp nhất quán yếu; 85
những hạn chế
Xem thêm bất biến (s); hậu điều kiện;
tiền điều kiện;
chuyển trạng thái; 56
tạo chủ đề
tầm quan trọng của; 116
xây dựng / xây dựng
Xem thêm vòng đời;
vật
rủi ro xuất bản; 41 trận42
vấn đề xử lý luồng; 41 trận42
một phần
ảnh hưởng xuất bản không an toàn; 50
nhà xây dựng tư nhân nắm bắt thành ngữ;
69 fn
bắt đầu từ
như mẫu lỗi đồng thời; 272
ThreadPoolExecutor ; 172 li
tùy biến sau thi công;
177
người tiêu dùng
Xem thêm chặn, xếp hàng; nhà sản xuất-
mô hình tiêu dùng;
chặn hàng đợi sử dụng; 88
mô hình sản xuất-tiêu dùng
chặn hàng đợi và; 87 Cung92
hộp đựng
Xem thêm các bộ sưu tập;
chặn hàng đợi như; 94
phạm vi
mối quan tâm an toàn chủ đề; 10
ganh đua / tranh cãi
như yếu tố ức chế hiệu suất; 263
khóa nội tại so với ReentrantLock
cân nhắc hiệu suất;
282 ngân286
Khóa
Chi phí; 320
đo đạc; 240
giảm tác động; 211
giảm, chiến lược; 232 Cung242
tác động mở rộng; 232
phương pháp tín hiệu giảm trong; 308
khóa so với các biến nguyên tử; 328
nguồn
và chính sách thực thi nhiệm vụ; 119
lợi thế deque; 92
khả năng mở rộng dưới
là lợi thế của AQS; 311
phạm vi
giới hạn biến nguyên tử của; 324
đồng bộ hóa; 230
chủ đề
giúp phát hiện va chạm với; 321
chốt giúp với; 95
tác động thông lượng; 228
mức độ không thực tế của
như cạm bẫy thử nghiệm hiệu suất;
268 con269
chuyển ngữ cảnh ; 229
Xem thêm hiệu suất;
như chi phí sử dụng luồng; 229 Tua230
điều kiện hàng đợi lợi thế; 297
chi phí; số 8
đăng nhập tin nhắn
chiến lược giảm thiểu; 243 con244
tác động hiệu quả của; 221
giảm; 243 con244
phương pháp tín hiệu giảm trong; 308
tác động thông lượng; 228
kiểm soát dòng chảy
Xem thêm sự kiện; vòng đời; MVC
(mô hình-khung nhìn-bộ điều khiển) pat-
chim nhạn;
phối hợp
trong mô hình sản xuất-tiêu dùng;
94
Xử lý sự kiện
đối tượng xem mô hình; 195 fg
đơn giản; 194 fg
đặc điểm chốt; 94
mô hình-khung nhìn-trình điều khiển
và trật tự khóa không nhất quán;
190
ví dụ theo dõi xe; 61
tiện
Xem thêm đáp ứng;
như động lực đồng thời; 2
quy ước
chú thích
tài liệu đồng thời; 6
Mẫu màn hình Java; 61

Trang 53
365
Mục lục
hợp tác / hợp tác
Xem thêm đồng thời / đồng thời;
đồng bộ hóa;
cơ chế cuối vòng đời
gián đoạn như; 93, 135
mô hình, khung nhìn và các đối tượng điều khiển
trong các ứng dụng GUI
trật tự khóa không nhất quán; 190
các đối tượng
bế tắc, trật tự khóa; 212 li
Bế tắc, khả năng; 211
khả năng sống động; 218
chủ đề
cơ chế đồng thời cho; 79
phối hợp
Xem thêm đồng bộ hóa / đồng bộ hóa-
nated ;
kiểm soát dòng chảy
mô hình sản xuất-tiêu dùng,
chặn hàng đợi sử dụng; 94
trong môi trường đa luồng
tác động hiệu quả của; 221
truy cập trạng thái có thể thay đổi
tầm quan trọng của; 110
sao chép
bộ sưu tập
thay thế cho khóa; 83
dữ liệu
hậu quả an toàn chủ đề; 62
CopyOnWriteArrayList ; 84, 86
sử dụng ấn phẩm an toàn; 52
sử dụng mô hình dữ liệu theo phiên bản
trong các ứng dụng GUI; 201
CopyOnWriteArraySet
sử dụng ấn phẩm an toàn; 52
đồng bộ Set thay thế; 86
tham số kích thước lõi
tác động tạo chủ đề; 171 , 172 fn
chương trình đồng bộ chính xác ; 341
tính đúng đắn ; 17
Xem thêm an toàn;
thử nghiệm; 248 con260
bàn thắng; 247
an toàn chủ đề được xác định trong điều khoản của; 17
tham nhũng
Xem thêm nguyên tử / nguyên tử; đóng gói-
lation; sự an toàn; tiểu bang;
dữ liệu
và xử lý gián đoạn; 142
nguyên nhân, dữ liệu cũ; 35
chi phí
Xem thêm hướng dẫn; hiệu suất;
sự an toàn; chiến lược; đánh đổi;
chủ đề; 229
chuyển ngữ cảnh; số 8
mất địa phương; số 8
đánh đổi
tối ưu hóa hiệu suất
chiến lược; 223
CountDownLatch ; 95
Sử dụng AQS; 315 Led316
sử dụng khung giải câu đố; 184
Ví dụ sử dụng TestHarness ; 96
đếm semaphores ; 98
Xem thêm Semaphore ;
giấy phép, mối quan hệ chủ đề; 248
Ví dụ SemaphoreOnLock ; 310 li
khớp nối
Xem thêm phụ thuộc;
hành vi
chặn xử lý hàng đợi; 89
ngầm
giữa nhiệm vụ và thực thi
chính sách; 16710170
Sử dụng CPU
Xem thêm hiệu suất;
và thực hiện tuần tự; 124
điều kiện hàng đợi lợi thế; 297
tác động đến kiểm tra hiệu suất; 261
giám sát; 240
tối ưu hóa
như mục tiêu đa luồng; 222
tác động chờ đợi trên; 295
sự sáng tạo
Xem thêm sao chép; thiết kế; chính sách;
đại diện;
hành động hợp chất nguyên tử; 80
lớp học
tái sử dụng lớp an toàn luồng
lợi thế hơn; 71
bộ sưu tập bản sao
như chiến lược đối tượng bất biến; 86
của các đối tượng bất biến; 48
phương pháp phụ thuộc vào nhà nước; 57
đồng bộ hóa; 94
chủ đề; 171 Gian172
rõ ràng, cho các nhiệm vụ; 115
sử dụng nhà máy ren; 175 Gian177
không ràng buộc, bất lợi; 116
hồ bơi chủ đề; 120
giấy gói

Trang 54
Mục lục
367
trong quá trình ghi nhớ; 103
tùy biến
cấu hình luồng
Sử dụng ThreadFactory ; 175
cấu hình nhóm luồng
hậu thi công; 177 Con179
CyclicBarrier ; 99
sử dụng thuật toán lặp song song; 102 li
sử dụng thử nghiệm; 255 li , 260 li
D
chủ đề daemon ; 165
dữ liệu
Xem thêm nhà nước;
tránh tranh chấp
và khả năng mở rộng; 237
trốn
sử dụng an toàn ren; 16
nonatomic
Hoạt động 64 bit; 36
chia sẻ; 33 trận54
Xem thêm ví dụ trình kết xuất trang;
phối hợp truy cập; 277 trận290, 319
lợi thế của chủ đề; 2
mô hình dữ liệu chia sẻ; 198 trục 202
chi phí đồng bộ hóa; số 8
mô hình dữ liệu phân chia; 201 , 201
cũ; 35 con36
mô hình dữ liệu phiên bản; 201
cuộc đua dữ liệu ; 341
điều kiện cuộc đua so với.; 20 fn
cấu trúc dữ liệu)
Xem thêm các bộ sưu tập; các đối tượng);
hàng đợi; ngăn xếp (s); cây;
sự điều khiển
Xem nguyên tử / nguyên tử; giam cầm-
tinh thần; đóng gói; lặp đi lặp lại
xoắn / lặp; đệ quy;
sự bảo vệ
và xử lý gián đoạn; 142
chia sẻ
như nguồn tuần tự hóa; 226
thử nghiệm chèn và loại bỏ han-
cưng chiều; 248
cơ sở dữ liệu
khả năng phục hồi bế tắc; 206
Kết nối JDBC
sử dụng chủ đề giam cầm; 43
tác động kích thước hồ bơi chủ đề; 171
Ngày
sử dụng hiệu quả bất biến; 53
loại bỏ mã chết
và thử nghiệm hiệu suất; 269 Gian270
thời hạn chờ đợi
như tính năng của Điều kiện ; 307
bế tắc (s) ; 205 , 205 Tiếng217
Xem thêm đồng thời / đồng thời,
lỗi; lòng ham muốn; sự an toàn;
phân tích
sử dụng bãi chứa ren; 216 Tua217
như thất bại sinh động; số 8
tránh
và giam cầm sợi chỉ; 43 fn
thuật toán không chặn advan-
Tage; 319, 329
chiến lược cho; 215 Tua217
đối tượng hợp tác; 211
chẩn đoán
chiến lược cho; 215 Tua217
thứ tự khóa động; 207 Khúc210
trong khung GUI; 190
chia tách khóa là yếu tố rủi ro cho; 235
khóa trong rủi ro lặp lại của; 83
hồi phục
khả năng cơ sở dữ liệu; 206
bỏ phiếu và hẹn giờ khóa
sử dụng tion; 279, 280
khóa thời gian sử dụng; 215
tránh tái phạm; 27
nguồn; 213 Tua215
chết đói chủ đề; 169 , 168 Từ169, 215
cái ôm chết người
Thấy bế tắc;
cái chết
bất thường, xử lý; 161 bóng163
gỡ lỗi
Xem thêm phân tích; thiết kế; tài liệu-
sự; hồi phục; thử nghiệm;
sử dụng chú thích; 353
đồng thời
chi phí so với tối ưu hiệu suất-
giá trị tion; 224
nhà máy chủ đề tùy chỉnh như viện trợ cho; 175
Cạm bẫy tối ưu hóa JVM; 38 fn
sử dụng bãi chứa ren; 216 fn
bãi chỉ
lợi thế khóa nội tại hơn
ReentrantLock ; 285 Tua286
rủi ro tạo chủ đề không giới hạn;
116

Trang 55
368
Mục lục
phân hủy
Xem thêm thành phần; phái đoàn;
đóng gói;
mô hình sản xuất-tiêu dùng; 89
liên quan đến nhiệm vụ; 113 ăn134
Mẫu trang trí
lớp bộ sưu tập sử dụng cho facpper
tin đồn; 60
tách rời
Các hoạt động
như mô hình sản xuất-tiêu dùng
lợi thế; 87
phân rã nhiệm vụ như represen-
tation của; 113
thông báo ngắt từ han-
tình yêu trong sự gián đoạn chủ đề
phương pháp xử lý; 140
nhiệm vụ từ thực thi
và khung thực thi ; 117
nhiệm vụ bị trì hoãn
Xem thêm thời gian / thời gian;
xử lý; 123
Trì hoãn
quản lý thời gian; 123
phái đoàn
Xem thêm thành phần; thiết kế; sự an toàn;
lợi thế
mở rộng lớp so với.; 314
cho an toàn bảo trì lớp học; 234
an toàn ren; 234
nguyên nhân thất bại; 67 Cung68
sự quản lý; 62
phụ thuộc
Xem thêm nguyên tử / nguyên tử; invari-
con kiến; hậu điều; trước
điều kiện; tiểu bang;

như loại bỏ, như nhà sản xuất-
lợi thế mô hình tiêu dùng;
87
trong bất biến đa biến
vấn đề an toàn chủ đề; 24
tiểu bang
chặn hoạt động; 291
các lớp học; 29
lớp học, xây dựng; 291 Từ318
quản lý; 291 Từ298
hoạt động; 57
hoạt động, điều kiện xếp hàng han-
cưng chiều; 296
nhiệm vụ tự do từ, tầm quan trọng
của; 113
bài tập
và chính sách thực thi; 167
bế tắc chết đói; 168
nhiệm vụ tự do từ
tầm quan trọng; 113
Deque ; 92
deques
Xem thêm các bộ sưu tập; cấu trúc dữ liệu);
hàng đợi;
ăn cắp công việc và; 92
thiết kế
Xem thêm tài liệu; hướng dẫn;
chính sách; đại diện;
chiến lược;
lớp học
sở hữu nhà nước là yếu tố của;
57 con58
quy tắc thiết kế đồng thời; 110
kiểm tra đồng thời; 250 con252
đóng gói điều kiện hàng đợi; 306
hàng đợi điều kiện
và vị ngữ điều kiện; 299
kiểm soát dòng chảy
đặc điểm chốt; 94
chính sách thực thi
những nhân tố ảnh hưởng; 167
GUI sử dụng một luồng
lý do cho; 189 Điện190
tầm quan trọng
trong các chương trình an toàn luồng; 16
của các lớp an toàn luồng
hướng dẫn; 55 trận58
song song
phân tích ứng dụng cho; 123 ăn133
tiêu chí song song hóa; 181
hiệu suất
phân tích, giám sát và im-
chứng minh; 221 Nền245
đánh đổi hiệu suất
đánh giá của; 223 Tua225
Nguyên tắc
đơn giản của các lĩnh vực cuối cùng; 48
mô hình sản xuất-tiêu dùng
lợi thế tách rời; 117
Sử dụng khung thi công; 117
chương trình
và phân rã nhiệm vụ; 113 ăn134
nhiệm vụ mang kết quả
vấn đề đại diện; 125

Trang 56
Mục lục
369
chiến lược
cho gián đoạn ngoại lệ ; 93
giam cầm sợi chỉ; 43
kích thước hồ bơi
các yếu tố liên quan cho; 170
nhiệm vụ thời gian; 131 ăn133
đánh đổi
sao chép bộ sưu tập so với khóa
trong quá trình lặp lại; 83
đồng thời so với đồng bộ
bộ sưu tập; 85
bộ sưu tập sao chép trên ghi; 87
khối đồng bộ; 34
kịp thời so với tính nhất quán; 62,
66, 70
mẫu thiết kế
ví dụ antipotype
kiểm tra khóa kép; 349 Tiếng349
ví dụ
Xem mẫu trang trí; MVC
(mô hình-khung nhìn-bộ điều khiển) pat-
chim nhạn; người sản xuất người tiêu dùng
mẫu; Mẫu đơn;
sự phá hủy
Xem giọt nước mắt;
vấn đề triết gia ăn uống ; 205
Xem thêm bế tắc;
loại bỏ chính sách bão hòa ; 174
loại bỏ chính sách bão hòa lâu đời nhất ; 174
tài liệu
Xem thêm gỡ lỗi; thiết kế; tốt
thực hành; hướng dẫn; chính
băng giá;
sử dụng chú thích; 6, 353
quy tắc thiết kế đồng thời vai trò; 110
quan trọng cho điều kiện
sử dụng thông báo; 304
tầm quan trọng
cho chính sách thực thi đặc biệt
yêu cầu; 168
sử dụng ngăn xếp ngăn xếp; 45
của các chính sách đồng bộ hóa; 74 Cung77
yêu cầu xuất bản an toàn; 54
khóa kiểm tra hai lần (DCL) ; 349
349
như mẫu lỗi đồng thời; 272
hạ cấp
thực hiện khóa đọc-ghi
chiến lược; 287
chương trình lái xe
cho ví dụ TimedPutTakeTest ; 262
năng động
Xem thêm đáp ứng;
biên soạn
như cạm bẫy thử nghiệm hiệu suất;
267 Tua268
khóa bế tắc; 207 Khúc210
E
EDT (chủ đề công văn sự kiện)
Sử dụng khung GUI; 5
sử dụng GUI đơn luồng; 189
sử dụng chủ đề giam cầm; 42
Ngôn ngữ lập trình Java hiệu quả
Hướng dẫn ; 46 bóng48, 73, 166, 257,
292, 305, 314, 347
hiệu quả
Xem thêm hiệu suất;
phản ứng với
tần suất bỏ phiếu; 143
kết quả bộ nhớ cache, xây dựng; 101 Gian109
bầu cử
Khóa; 231 fn
Tối ưu hóa JVM; 286
đóng gói
Xem thêm truy cập; nguyên tử / nguyên tử;
giam cầm; sự an toàn; tiểu bang;
hiển thị;
phá vỡ
Chi phí; 16 Lõi17

như mô hình sản xuất-tiêu dùng
lợi thế; 87
sử dụng thành phần; 74
quy tắc thiết kế đồng thời vai trò; 110
thực hiện
mở rộng lớp vi phạm; 71
mối quan hệ giam cầm
với; 58 Hậu60
quản lý bất biến với; 44
hành vi khóa
tạo điều kiện tái định cư của; 27
hủy bỏ không chuẩn; 148 Bếp150
của hàng đợi điều kiện; 306
phương pháp vòng đời; 155
đồng bộ hóa
quản lý vòng lặp ẩn
xuyên qua; 83
nguy hiểm xuất bản cho; 39
tiểu bang

Trang 57
370
Mục lục
phá vỡ, chi phí của; 16 Lõi17
sử dụng bảo vệ bất biến; 83
mối quan hệ sở hữu với; 58
vai trò đồng bộ hóa; 94
sử dụng lớp an toàn luồng; 23
chính sách đồng bộ hóa
và khóa phía khách hàng; 71
quyền sở hữu chủ đề; 150
vai trò an toàn chủ đề; 55
sử dụng an toàn ren; 16
cuối vòng đời
Xem thêm chủ đề;
kỹ thuật quản lý; 135 con166
thực thi
khóa chính sách, thiếu; 28
giao thức nhập cảnh
hoạt động phụ thuộc nhà nước; 306
lỗi
Callable xử lý; 97
lỗi
như lý do hủy bỏ; 136
đồng thời
Thấy bế tắc; sống động; cuộc đua
vũ điệu;
thoát hiểm ; 39
phân tích; 230
Phòng ngừa
trong trường hợp bị giam cầm; 59
xuất bản và; 39 trận42
Các yếu tố rủi ro
trong trường hợp bị giam cầm; 60
Giao thức Ethernet
sử dụng backoff lũy thừa; 219
đánh giá
Xem thêm thiết kế; đo đạc; kiểm tra-
ing;
của sự đánh đổi hiệu suất; 223 Tua225
sự kiện ; 191
như lý do hủy bỏ; 136
công văn
Sử dụng khung GUI; 5
sự điều khiển
Kiểm soát lưu lượng, đơn giản; 194 fg
đối tượng xem mô hình; 195 fg
chủ đề lợi ích cho; 4
xử lý chốt dựa trên; 99
vòng lặp sự kiện chính
so với chủ đề công văn sự kiện; 5
thông báo
sao chép bộ sưu tập sao chép-
Tage; 87
xử lý tuần tự
trong các ứng dụng GUI; 191
thời gian
và thất bại sinh động; số 8
các lớp ví dụ
AtomicPseudoRandom ; 327 li
AttributionStore ; 233 li
Bối cảnh ; 199 li
Rào cản ; 261 li
BaseBoundedBuffer ; 293 li
BetterAttributionStore ; 234 li
BetterVector ; 72 li
Lớn ; 258 li
BoundedBuffer ; 248, 249 li , 297, 298 li
Giới hạnBufferTest ; 250 li
BoundedExecutor ; 175
BoundedHashset ; 100 li
Nhà sản xuất BrokenPrime ; 139 li
Bộ đệm ẩn ; 31 li
CancellableTask ; 151 li
CasCount ; 323 li
CasNumberRange ; 326 li
Tế bàoAutomata ; 102 li
Tính toán được ; 103 li
Đồng thờiPuheadsSolver ; 186 li
Đồng thờiStack ; 331 li
Điều kiệnBoundedBuffer ; 308, 309 li
Người tiêu dùng ; 256 li
Quầy ; 56 li
CountingFactorizer ; 23 li
Trình thu thập thông tin ; 157 li
Đại biểuVehicleTracker ; 65 li ,
201
Chứng minhDeadlock ; 210 li
Người điều phối ; 212 li , 214 li
DoubleCheckedLocking ; 349 li
Chức năng đắt tiền ; 103 li
Yếu tố ; 109 li
FileCrawler ; 91 li
Người tương lai ; 128 li
GrumpyBoundedBuffer ; 292, 294 li
GuiExecutor ; 192, 194 li
HiddenIterator ; 84 li
Danh sách được cải thiện ; 74 li
Người lập chỉ mục ; 91 li
IndexerThread ; 157 li
Dịch vụ lập chỉ mục ; 156 li
LazyInitRace ; 21 li
LeftRightDeadlock ; 207 li
LifecyclWebServer ; 122 li
LinkedQueue ; 334 li

Trang 58
Mục lục
371
ListHelper ; 73, 74 li
Dịch vụ đăng nhập ; 153, 154 li
LogWriter ; 152 li
Ghi nhớ ; 103 li , 108 li
Ghi nhớ2 ; 104 li
Ghi nhớ3 ; 106 li
MonitorVehicleTracker ; 63 li
MutableInteger ; 36 li
MutablePoint ; 64 li
MyAppThread ; 177, 178 li
MyThreadFactory ; 177 li
Nút ; 184 li
Không có khả năng ; 34 li
NumberRange ; 67 li
OneShotLatch ; 313 li
OneValueCache ; 49 li , 51 li
Hết thời gian ; 124 li , 161
Nhân viên ; 59 li
Điểm ; 64 li
Có thể sắp xếp lại ; 340 li
Trình tải trước ; 97 li
Thủ tướng ; 137 li
Nhà sản xuất chính ; 141 li
Khóa riêng ; 61 li
Nhà sản xuất ; 256 li
PutTakeTest ; 255 li , 260
Câu đố ; 183 li
PuzzleSolver ; 188 li
Xếp hàngFuture ; 129 li
ĐọcThread ; 149 li
Đọc Bản đồ ; 288 li
ReentrantLockPseudoRandom ; 327 li
Trình kết xuất ; 130 li
Trình nghe an toàn ; 42 li
Điểm an toàn ; 69 li
SafeStates ; 350 li
Lên lịchExecutorService ; 145 li
SemaphoreOnLock ; 310 li
Trình tự ; 7 li
SequentialPuheadsSolver ; 185 li
Máy chủStatus ; 236 li
Mô phỏngCAS ; 322 li
SingleThreadRenderer ; 125 li
Máy chủ SingleThreadWebServer ; 114 li
SleepyBoundedBuffer ; 295, 296 li
Ổ cắmUsingTask ; 151 li
Bộ giải ; 186 li
StatlessFactorizer ; 18 li
Sọc Sơ đồ ; 238 li
Khả năng xoay vòng ; 191, 192, 193 li
Đồng bộ hóa ; 343 li
Bộ đồng bộ hóa ; 26 li
Đồng bộ hóaInteger ; 36 li
TaskExecutWebServer ; 118 li
Nhiệm vụ ; 94 li
Taxi ; 212 li , 214 li
TestHarness ; 96 li
Kiểm traThreadFactory ; 258 li
ThisEscape ; 41 li
ThreadDeadlock ; 169 li
ThreadGate ; 305 li
ThreadPerTaskExecutor ; 118 li
ThreadPerTaskWebServer ; 115 li
ThreeStooges ; 47 li
TimedPutTakeTest ; 261
TimingThreadPool ; 180 li
Theo dõiExecutorService ; 159 li
UEHLogger ; 163 li
UnsafeCachingFactorizer ; 24 li
UnsafeCountingFactorizer ; 19 li
Không an toànLazyInitialization ; 345 li
Không an toànStates ; 40 li
Giá trị gia tăng ; 184, 187 li
VisualComponent ; 66 li
VoliverseCachedFactorizer ; 50 li
WebCrawler ; 160 li
Widget ; 27 li
InsideThreadExecutor ; 119 li
Công nhânThread ; 227 li
ngoại lệ
Xem thêm lỗi (s); gián đoạn; cuộc sống-
sứt mẻ;
và điều kiện tiên quyết thất bại; 292 Gian295
như hình thức hoàn thành; 95
Callable xử lý; 97
nguyên nhân
dữ liệu cũ; 35
sự điều khiển
Hạn chế có thể chạy được; 125
đăng nhập
Ví dụ UEHLogger ; 163 li
xử lý lớp an toàn luồng; 82
Nhược điểm hẹn giờ ; 123
xử lý ngoại lệ không bị bắt; 162
163
không được kiểm tra
Đánh bắt, nhược điểm; 161
Trao đổi
Xem thêm mô hình nhà sản xuất-người tiêu dùng;
như rào cản hai bên; 101
sử dụng ấn phẩm an toàn; 53

Trang 59
372
Mục lục
hành hình
nộp so với, ngoại lệ chưa bắt han-
cưng chiều; 163
chấp hành
chính sách
thiết kế, các yếu tố ảnh hưởng; 167
Thi công phương pháp nhà máy; 171
khớp nối ngầm giữa các nhiệm vụ
và; 16710170
phân tích song song cho; 123 ăn133
bài tập; 113 ăn134
chính sách; 118 ăn119
tuần tự; 114
ExecutException
Callable xử lý; 98
Khung thi công ; 117 li , 117 đỉnh133
và xử lý sự kiện GUI; 191, 192
và các tác vụ GUI chạy dài; 195
như mô hình sản xuất-tiêu dùng; 88
thiết kế chính sách thi công; 167
Sử dụng FutureTask ; 97
Ví dụ GuiExecutor ; 194 li
đơn luồng
ví dụ bế tắc; 169 li
ExecutorCompletionService
trong ví dụ kết xuất trang; 129
Nhân viên điều hành
phương pháp nhà máy
tạo chủ đề hồ bơi với; 120
Dịch vụ điều hành
và tắt dịch vụ; 153 Tiếng155
chiến lược hủy bỏ sử dụng; 146
ví dụ kiểm tra thư; 158
phương pháp vòng đời; 121 li , 121 TIẾNG 122
kiệt sức
Thấy thất bại; rò rỉ; cạn kiệt tài nguyên-
sự;
giao thức thoát
hoạt động phụ thuộc nhà nước; 306
ổ khóa rõ ràng ; 277 trận290
gián đoạn trong quá trình mua lại; 148
dự phòng theo cấp số nhân
và tránh livelock; 219
mở rộng
các lớp an toàn chủ đề hiện có
và khóa phía khách hàng; 73
chiến lược và rủi ro; 71
ThreadPoolExecutor ; 179
khóa ngoài ; 73
F
nhà máy
Xem thêm sáng tạo;
phương pháp
xây dựng sử dụng với; 42
newTaskFor ; 148
bộ sưu tập đồng bộ; 79, 171
tạo chủ đề hồ bơi với; 120
chủ đề; 175 , 175 Quảng177
lặp không nhanh ; 82
Xem thêm Lặp lại / lặp;
sự thất bại
Xem thêm trường hợp ngoại lệ; sống, thất bại;
hồi phục; sự an toàn;
nguyên nhân
dữ liệu cũ; 35
thoái hóa biến chất
nhiệm vụ thiết kế quan trọng; 113
kỹ thuật quản lý; 135 con166
chế độ
thử nghiệm cho; 247 Mây274
điều kiện tiên quyết
xử lý bộ đệm giới hạn của; 292
tuyên truyền cho người gọi; 292 Gian295
chủ đề
xử lý ngoại lệ không bị bắt;
162 bóng163
hết giờ
sử dụng phát hiện bế tắc; 215
công bằng
Xem thêm đáp ứng; đồng bộ-
sự;
như động lực đồng thời; 1
khóa công bằng; 283
khóa nonfair; 283
semaphores nonfair so với công bằng
đo lường hiệu suất; 265
xếp hàng
hàng đợi điều kiện nội tại; 297 fn
Tùy chọn ReentrantLock ; 283 Tuy285
ReentrantReadWriteLock ; 287
lập kế hoạch
thao tác ưu tiên luồng
rủi ro; 218
đồng bộ hóa 'đường dẫn nhanh'
Hoạt động dựa trên CAS so với.; 324
Chi phí; 230

Trang 60
Mục lục
373
Phản hồi
Xem thêm GUI;
người sử dụng
trong các tác vụ GUI chạy dài; 196 li
lĩnh vực
cập nhật nguyên tử; 335 Điện336
cánh đồng nóng
tránh né; 237
cập nhật, biến nguyên tử quảng cáo-
thuận lợi; 239 con240
an toàn khởi tạo
đảm bảo lĩnh vực cuối cùng; 48
Hàng đợi hàng năm
Triển khai BlockingQueue ; 89
các tập tin
Xem thêm dữ liệu; cơ sở dữ liệu;
như cơ chế truyền thông; 1
sau cùng
và các đối tượng bất biến; 48
quy tắc thiết kế đồng thời vai trò; 110
bất biến không được đảm bảo bởi; 47
sử dụng ấn phẩm an toàn; 52
dễ bay hơi so với.; 158 fn
hoàn thiện
JVM sử dụng tắt máy có trật tự; 164
cảnh báo; 165 con166
cuối cùng chặn
Xem thêm gián đoạn; khóa (ing);
tầm quan trọng với ổ khóa rõ ràng; 278
Công cụ kiểm toán mã FindBugs
Xem thêm các công cụ;
như ví dụ công cụ phân tích tĩnh; 271
lỗi khóa được phát hiện bởi; 28 fn
máy dò khóa chưa được phát hành; 278 fn
chiến lược xử lý sự kiện cháy và quên
nhược điểm của; 195
cờ
Xem mutex;
yêu cầu hủy
như cơ chế hủy bỏ; 136
tình trạng gián đoạn; 138
Uyển chuyển
Xem thêm đáp ứng; khả năng mở rộng;
và giam cầm; 60
tách nhiệm vụ từ
thi công, thuận lợi cho;
119
thiết kế đối tượng bất biến cho; 47
trong các thuật toán dựa trên CAS; 322
chính sách gián đoạn; 142
quản lý tài nguyên
như chặn lợi thế hàng đợi; 88
hướng dẫn thiết kế nhiệm vụ cho; 113
vai trò thiết kế nhiệm vụ; 113
Kiểm soát lưu lượng
mạng truyền thông, chủ đề
so sánh hồ bơi; 173 fn
mong manh
Xem thêm gỡ lỗi; hướng dẫn; ro
sự nhộn nhịp; sự an toàn; khả năng mở rộng;
thử nghiệm;
vấn đề và nguyên nhân
như mở rộng lớp học; 71
như khóa phía khách hàng; 73
sử dụng gián đoạn cho không
mục đích tiêu chuẩn; 138
vấn đề; 43
cõng; 342
các lớp học phụ thuộc nhà nước; 304
biến dễ bay hơi; 38
các giải pháp
thành phần; 73
đóng gói; 17
giam cầm so với ad-hoc
giam cầm sợi chỉ; 44
khung
Xem thêm khung AQS; cấu trúc dữ liệu
ture (s); Khung thi công;
Khung RMI; Phục vụ
khung;
ứng dụng
và ThreadLocal ; 46
tuần tự ẩn trong; 227
sử dụng chủ đề; 9
tác động sử dụng chủ đề trên các ứng dụng; 9
chủ đề lợi ích cho; 4
chức năng
mở rộng cho chủ đề an toàn hiện có
các lớp học
chiến lược và rủi ro; 71
kiểm tra
so với kiểm tra hiệu suất; 260
Tương lai ; 126 li
hủy bỏ
của tác vụ GUI chạy dài; 197
chiến lược sử dụng; 145 Tiếng147
đă ̣c điểm của; 95
đóng gói của can-phi tiêu chuẩn
sử dụng tế bào; 148
khả năng xử lý kết quả; 125
sử dụng ấn phẩm an toàn; 53
đại diện vòng đời nhiệm vụ bởi; 125

Trang 61
374
Mục lục
đại diện nhiệm vụ
chiến lược thực hiện; 126
Tương lai ; 95
Sử dụng AQS; 316
như chốt; 95 Cung98
thông báo hoàn thành
của nhiệm vụ GUI chạy dài; 198
hiệu quả và khả năng mở rộng bộ nhớ cache
đề cập với; 105
sử dụng ví dụ; 97 li , 108 li , 151 li , 199 li
sử dụng đại diện nhiệm vụ; 126
G
thu gom rác thải
như cạm bẫy thử nghiệm hiệu suất; 266
cánh cổng
Xem thêm rào cản; có điều kiện;
chốt (es);
vai trò chốt; 94
Ví dụ ThreadGate ; 304
biến toàn cầu
Biến ThreadLocal sử dụng với; 45
thực hành tốt
Xem thiết kế; tài liệu; mã hóa
phép tính; hướng dẫn; đục lỗ
pháp sư; chiến lược;
duyên dáng
suy thoái
và chính sách thực thi; 121
và chính sách bão hòa; 175
hạn chế số lượng nhiệm vụ; 119
nhiệm vụ thiết kế quan trọng; 113
tắt
so với tắt máy đột ngột; 153
độ chi tiết
Xem thêm nguyên tử / nguyên tử; phạm vi;
lợi thế biến nguyên tử; 239 con240
Khóa
Hiểu biết pháp luật của Amdahl; 229
giảm bớt; 235 con237
lợi thế thuật toán nonblocking;
319
tuần tự hóa
tác động thông lượng; 228
hẹn giờ
tác động đo lường; 264
bảo vệ
các đối tượng; 28 , 54
tiểu bang
ổ khóa sử dụng cho; 27 trận29
@ GuardedBy ; 353
và đồng bộ hóa tài liệu
chính sách; 7 fn , 75
GUI (Giao diện người dùng đồ họa)
Xem thêm sự kiện; đơn luồng (ed);
Lung lay;
các ứng dụng; 189 Hậu 202
mối quan tâm an toàn chủ đề; 10 trận11
khung
như thực thi tác vụ đơn luồng
ví dụ tion; 114 fn
xử lý công việc dài hạn; 195 195198
Sử dụng mô hình MVC
trong ví dụ theo dõi xe; 61
độ nhạy thời gian đáp ứng
và chính sách thực thi; 168
sử dụng một luồng
lý do cho; 189 Điện190
chủ đề lợi ích cho; 5
hướng dẫn
Xem thêm thiết kế; tài liệu; chính
băng giá; chiến lược;
phân bổ so với đồng bộ hóa; 242
nguyên tử
các định nghĩa; 22
quy tắc thiết kế đồng thời; 110
Phương pháp điều kiện
nhầm lẫn tiềm năng; 307
vị ngữ điều kiện
tài liệu; 299
khóa và điều kiện hàng đợi rela-
tàu chiến; 300
điều kiện chờ sử dụng; 301
giam cầm; 60
tránh bế tắc
rủi ro phương pháp người ngoài hành tinh; 211
khóa đặt hàng; 206
lợi thế cuộc gọi mở; 213
chết đói chủ đề; 169
tài liệu
giá trị cho sự an toàn; 16
đóng gói; 59, 83
giá trị cho sự an toàn; 16
xử lý ngoại lệ; 163
chính sách thực thi
thiết kế; 119
ý nghĩa trường hợp đặc biệt; 168
sử dụng cuối cùng; 48
biện pháp phòng ngừa quyết toán; 166
xảy ra - trước khi sử dụng; 346
bất biến

Trang 62
Mục lục
375
đối tượng hiệu quả bất biến; 53
các đối tượng; 46
yêu cầu cho; 47
giá trị cho sự an toàn; 16
an toàn khởi tạo; 349, 350
sơ đồ xen kẽ; 6
xử lý gián đoạn
hủy bỏ mối quan hệ; 138
tầm quan trọng của gián đoạn pol-
kiến thức băng giá; 142, 145
nuốt chửng trước-
tions; 143
khóa nội tại so với ReentrantLock ;
285
bất biến
yêu cầu khóa cho; 29
chủ đề an toàn quan trọng; 57
giá trị cho sự an toàn; 16
Khóa
ganh đua, giảm bớt; 233
tranh chấp, tác động mở rộng;
231
giữ; 32
trật tự, tránh bế tắc;
206
đo đạc
tầm quan trọng; 224
thông báo; 303
các đối tượng
không quốc tịch, chủ đề an toàn của; 19
hoạt động đặt hàng
vai trò đồng bộ hóa; 35
tối ưu hóa
khóa tác động tranh chấp; 231
sinh non, tránh; 223
phân tích song song; 123 ăn133
hiệu suất
câu hỏi tối ưu hóa; 224
đơn giản so với.; 32
hậu điều; 57
sử dụng lĩnh vực tư nhân; 48
sự xuất bản; 52, 54
sự an toàn
Định nghĩa; 18
thử nghiệm; 252
khả năng mở rộng; 84
thuộc tính; 222
khóa tác động vào; 232
vòng lặp tuần tự
tiêu chí song song hóa; 181
nguồn tuần tự hóa; 227
chia sẻ
chiến lược an toàn; 16
chia sẻ đối tượng; 54
sự đơn giản
hiệu suất so với.; 32
tránh chết đói
đề phòng ưu tiên; 218
tiểu bang
bảo quản thống nhất; 25
quản lý; 23
biến, độc lập; 68
đối tượng không quốc tịch
an toàn ren của; 19
đồng bộ hóa
đối tượng bất biến thay thế-
tinh thần cho; 52
chia sẻ yêu cầu nhà nước cho; 28
hủy nhiệm vụ
tiêu chuẩn cho; 147
thử nghiệm
kiểm tra hiệu suất hiệu quả; 270
cuộc đua dữ liệu nhạy cảm thời gian; 254
tài liệu tham khảo này
rủi ro xuất bản; 41
chủ đề
đề phòng daemon; 165
xử lý đóng gói; 150
phương pháp vòng đời; 150
bể bơi; 174
sự an toàn; 18, 55
biến dễ bay hơi; 38
H
khóa tay ; 282
xảy ra trước
Định nghĩa JMM; 340 lăng342
cõng; 3433344
hậu quả công bố; 244 Cung249
phần cứng
Xem thêm sử dụng CPU;
hỗ trợ đồng thời; 321
Tương tác JVM
sắp xếp lại; 34
mô hình bộ nhớ nền tảng; 339
thay đổi thời gian và đặt hàng bằng cách
rủi ro an toàn chủ đề; 7
mã băm / hashtables
Xem thêm các bộ sưu tập;
Bản đồ đồng thời ; 84 Cung86
lợi thế hiệu suất của; 242
Hashtable ; 79

Trang 63
376
Mục lục
sử dụng ấn phẩm an toàn; 52
cảm ứng khóa đặt hàng với; 208
sử dụng khóa tước; 237
công cụ kiểm tra đống
Xem thêm các công cụ;
đo lường sử dụng bộ nhớ; 257
Heisenbugs ; 247 fn
lớp người trợ giúp
và mở rộng chức năng lớp học;
72 Cung73
nhiệm vụ không đồng nhất
hạn chế song song hóa; 127 hạ 129
tín hiệu bị tấn công
Xem các tín hiệu bị bỏ lỡ;
Hoare, xe hơi
Mẫu màn hình Java lấy cảm hứng từ
(tài liệu tham khảo); 60 fn
cẩu
biến
như cạm bẫy tối ưu hóa JVM; 38 fn
nhiệm vụ đồng nhất
lợi thế song song; 129
móc
Xem thêm mở rộng;
hoàn thành
trong FutureTask ; 198
tắt; 164
JVM tắt máy có trật tự; 164 trận đấu 165
tắt máy đơn
chiến lược đóng cửa có trật tự; 164
Phần mở rộng ThreadPoolExecutor ; 179
cánh đồng nóng
tránh
lợi thế về khả năng mở rộng; 237
đang cập nhật
lợi thế biến nguyên tử; 239
240
JVM HotSpot
sử dụng biên dịch động; 267
"Nhanh như thế nào" ; 222
Xem thêm GUI; độ trễ; phản ứng nhanh nhẹn-
không;
so với 'bao nhiêu'; 222
"Bao nhiêu" ; 222
Xem thêm năng lực; khả năng mở rộng;
thông lượng;
tầm quan trọng đối với các ứng dụng máy chủ;
223
so với 'nhanh như thế nào'; 222
Câu hỏi
yêu cầu an toàn ren; 58 fn
Tôi
Tôi / O
Xem thêm tài nguyên;
không đồng bộ
chặn không gián đoạn; 148
đăng nhập tin nhắn
chiến lược giảm thiểu; 243 con244
hoạt động
tác động kích thước hồ bơi chủ đề; 170
hạn chế thực hiện tuần tự; 124
ứng dụng máy chủ
hàm ý thực thi nhiệm vụ; 114
đồng bộ
chặn không gián đoạn; 148
chủ đề sử dụng để mô phỏng; 4
công cụ đo lường sử dụng; 240
sự bình tĩnh
và giảm thiểu điều kiện chủng tộc; 161
thành ngữ
Xem thêm thuật toán; quy ước;
mẫu thiết kế; thông thạo-
tation; chính sách; giao thức;
chiến lược;
khóa kiểm tra hai lần (DCL)
như thực hành xấu; 349 Tiếng349
lớp học khởi tạo lười biếng; 347
348
bắt giữ nhà xây dựng tư nhân; 69 fn
khởi tạo an toàn; 346 Tiếng348
xuất bản an toàn; 52 Mây53
Ngoại lệ nhà nước bất hợp pháp
Callable xử lý; 98
@Immutable ; 7, 353
bất biến / bất biến ; 46 Phi49
Xem thêm nguyên tử / nguyên tử; sự an toàn;
quy tắc thiết kế đồng thời vai trò; 110
đối tượng hiệu quả bất biến; 53
đảm bảo an toàn khởi tạo; 51
khởi tạo giới hạn an toàn; 350
các đối tượng; 46
xuất bản với biến động; 48 Cung49
yêu cầu cho; 47
vai trò trong chính sách đồng bộ hóa; 56
sử dụng an toàn ren; 16
khớp nối ngầm
Xem thêm phụ thuộc;
giữa nhiệm vụ và thực thi poli-
cies; 16710170

Trang 64
Mục lục
377
xuất bản không đúng ; 51
Xem thêm an toàn;
hoạt động gia tăng ( ++ )
như hoạt động phi nguyên tử; 19
độc lập / độc lập ; 25
Xem thêm phụ thuộc; đóng gói-
sự; bất biến (s); tiểu bang;
thiếu bất biến đa biến
vấn đề an toàn chủ đề; 24
sử dụng song song; 183
biến trạng thái; 66 , 66
khóa chia tách sử dụng với; 235
bài tập
lợi thế đồng thời; 113
đặt hàng khóa
để tránh bế tắc; 208 trận210
khởi tạo
Xem thêm xây dựng / xây dựng;
lười biếng; 21
như điều kiện chủng tộc gây ra; 21 trận22
thành ngữ an toàn cho; 348 li
rủi ro xuất bản không an toàn; 345
sự an toàn
và các đối tượng bất biến; 51
đảm bảo lĩnh vực cuối cùng; 48
thành ngữ cho; 346 Tiếng348
Hỗ trợ JMM; 349
lớp học bên trong
rủi ro xuất bản; 41
giam cầm ; 59 , 58 C6060
Xem thêm bị giam cầm; đóng gói;
thiết bị đo đạc
Xem thêm phân tích; khai thác gỗ; màn hình-
ing; tài nguyên, quản lý-
tinh thần; số liệu thống kê; thử nghiệm;
tạo chủ đề
sử dụng thử nghiệm nhóm chủ đề; 258
tiềm năng
như lợi thế chính sách thực thi;
121
sử dụng dịch vụ tắt máy; 158
ủng hộ
Sử dụng khung thi công; 117
yêu cầu kích thước hồ bơi chủ đề
sử dụng khai thác của; 170
ThreadPoolExecutor móc cho; 179
giao diện
người sử dụng
chủ đề lợi ích cho; 5
xen kẽ
giải thích sơ đồ; 6
tạo ra
sử dụng thử nghiệm; 259
đầu ra đăng nhập
và khóa phía khách hàng; 150 fn
hoạt động; 81 fg
tác động đặt hàng; 339
chủ đề
nguy hiểm của; 5 trận8
phụ thuộc thời gian tác động vào
điều kiện chủng tộc; 20
thực hiện luồng
trong định nghĩa an toàn chủ đề; 18
bị gián đoạn ( Chủ đề )
phòng ngừa sử dụng; 140
Ngắt ngoại lệ
linh hoạt chính sách gián đoạn advan-
Tage; 142
API gián đoạn; 138
tuyên truyền của; 143 li
chiến lược xử lý; 93
hủy nhiệm vụ
tiêu chuẩn cho; 147
gián đoạn (s) ; 93 , 135 , 138 Đỉnh150
Xem thêm hoàn thành; lỗi; vòng đời;
thông báo; chấm dứt;
kích hoạt;
và điều kiện chờ đợi; 307
chặn và; 92 trận94
chặn sử dụng thử nghiệm; 251
chiến lược phản ứng gián đoạn
tuyên truyền ngoại lệ; 142
phục hồi trạng thái; 142
sử dụng khóa mua lại; 279 Chân281
không hủy sử dụng cho; 143
chặn không gián đoạn
sự điều khiển; 1471616150
lý do; 148
chính sách; 141 , 141 Tiếng142
phòng ngừa
lý do khấu hao; 135 fn
yêu cầu
chiến lược xử lý; 140
trả lời; 14216150
nuốt
như thực hành chán nản; 93
hậu quả xấu của; 140
khi được phép; 143
chủ đề; 138
sử dụng biến dễ bay hơi với; 39

Trang 65
378
Mục lục
không linh hoạt
đóng gói đặc trưng bởi; 150
hàng đợi điều kiện nội tại ; 297
nhược điểm của; 306
khóa nội tại ; 25 , 25
Xem thêm đóng gói; khóa (ing);
sự an toàn; đồng bộ hóa;
chủ đề;
mua lại, khối không gián đoạn-
lý do ing; 148
lợi ích của; 285
khóa rõ ràng so với.; 277 Gian278
quan hệ hàng đợi điều kiện nội tại-
tàu; 297
hạn chế của; 28
sử dụng đệ quy; 237 fn
ReentrantLock so với.; 282 ngân286
quản lý tầm nhìn với; 36
bất biến
Xem thêm nguyên tử / nguyên tử; bài đăng-
điều kiện; tiền điều kiện;
tiểu bang;
và công bố biến nhà nước; 68
Ví dụ BoundedBuffer ; 250
kiểm tra gọi lại; 257
quy tắc thiết kế đồng thời vai trò; 110
đóng gói
nhà nước, bảo vệ; 83
giá trị cho; 44
sử dụng đối tượng bất biến; 49
biến trạng thái độc lập yêu cầu-
ngôi sao; 66 Cung67
đa biến
và các biến nguyên tử; 325
yêu cầu nguyên tử; 57, 67
68
yêu cầu khóa cho; 29
bảo quản, như an toàn chủ đề
yêu cầu; 24
vấn đề an toàn chủ đề; 24
bảo quản
sử dụng đối tượng bất biến; 46
cơ chế và đồng bộ-
vai trò chính sách tion; 55 trận56
nguy hiểm xuất bản cho; 39
đặc điểm kỹ thuật của
sử dụng an toàn ren; 16
vai trò an toàn chủ đề; 17
iostat ứng dụng
Xem thêm đo lường; công cụ;
Đo lường I / O; 240
lặp / lặp
Xem thêm đồng thời / đồng thời;
kiểm soát dòng chảy; đệ quy;
như hành động ghép
trong hoạt động thu gom; 79
yêu cầu nguyên tử trong; 80
thất bại nhanh chóng; 82
Đồng thờiModificationEx805-
ngoại lệ tion với; 82 Gian83
ẩn; 83 kho84
khóa
loại bỏ bộ sưu tập đồng thời
cần thiết cho; 85
nhược điểm của; 83
thuật toán lặp song song
quản lý rào cản của; 99
song song hóa; 181
không đáng tin cậy
và khóa phía khách hàng; 81
yếu nhất quán; 85
J
Đặc tả ngôn ngữ Java, The ; 53,
218 fn , 259, 358
Mô hình bộ nhớ Java (JMM) ; 337
Xem thêm thiết kế; sự an toàn; đồng bộ-
sự; hiển thị;
đảm bảo an toàn khởi tạo cho
đối tượng bất biến; 51
Mẫu màn hình Java ; 60 , 60 bóng61
sử dụng thành phần; 74
ví dụ theo dõi xe; 61 Gian71
Ngôn ngữ lập trình Java, The ; 346
gói java.nio
I / O đồng bộ
chặn không gián đoạn; 148
JDBC (Kết nối cơ sở dữ liệu Java)
Kết nối
sử dụng chủ đề giam cầm; 43
JMM (Mô hình bộ nhớ Java)
Xem Mô hình bộ nhớ Java (JMM);
tham gia ( Chủ đề )
hẹn giờ
có vấn đề với; 145
Các tệp tin (Trang JavaServer)
yêu cầu an toàn ren; 10
JVM (Máy ảo Java)
Xem thêm tối ưu hóa;
hạn chế xử lý bế tắc; 206
phân tích thoát hiểm; 230 con231
khóa xử lý tranh chấp; 320 fn

Trang 66
Mục lục
379
sử dụng thuật toán nonblocking; 319
cạm bẫy tối ưu hóa; 38 fn
tối ưu hóa; 286
vấn đề tắt dịch vụ; 152 Gian153
tắt; 164 Điện166
và chủ đề daemon; 165
trật tự tắt máy; 164
tối ưu hóa đồng bộ hóa bằng cách;
230
tương tác hết thời gian
và kích thước bể lõi; 172 fn
sử dụng chủ đề; 9
xử lý ngoại lệ không bị bắt; 162 fn
K
giữ thời gian sống
tác động chấm dứt chủ đề; 172
L
chốt (es) ; 94 , 94
Xem thêm các rào cản; chặn;
ngữ nghĩa; đồng bộ-
ers;
rào cản so với.; 99
nhị phân; 304
Dựa trên AQS; 313
Tương lai ; 95 Cung98
sử dụng khung giải câu đố; 184
Ví dụ ThreadGate ; 304
lớp
ứng dụng ba lớp
như hiệu suất so với khả năng mở rộng
hình minh họa; 223
lười khởi tạo ; 21
như điều kiện chủng tộc gây ra; 21 trận22
thành ngữ an toàn cho; 348 li
rủi ro xuất bản không an toàn; 345
rò rỉ
Xem thêm hiệu suất;
nguồn
thử nghiệm cho; 257
chủ đề; 161
Vấn đề hẹn giờ với; 123
UncaughtExceptionHandler
phòng ngừa; 162 bóng163
phạm vi từ vựng
như bối cảnh giam cầm; 59
thư viện
bộ sưu tập an toàn chủ đề
đảm bảo công bố an toàn; 52
Cuộc sống tự động trò chơi automata
sử dụng rào cản để tính toán; 101
vòng đời
Xem thêm hủy bỏ; hoàn thành;
xây dựng / xây dựng;
Chấp hành viên ; gián đoạn; đóng cửa
xuống; chấm dứt; chủ đề;
thời gian / thời gian;
đóng gói; 155
Giám đốc điều hành
thực hiện; 121 Máy 122
Chiến lược quản lý; 135 con166
ủng hộ
Sử dụng khung thi công; 117
bài tập
và Tương lai ; 125
Giai đoạn thực hiện ; 125
chủ đề
tác động hiệu suất; 116
quản lý dịch vụ dựa trên luồng
tinh thần; 150
quy trình nhẹ
Xem chủ đề;
danh sách liên kết
LinkedBlockingDeque ; 92
LinkedBlockingQueue ; 89
lợi thế về hiệu suất; 263
sử dụng hồ bơi của; 173 Tháp174
Danh sách liên kết ; 85
Hàng đợi không chặn Michael-Scott;
332 trận335
không chặn; 330
Danh sách
CopyOnWriteArrayList là đồng tình
thu tiền thuê cho; 84, 86
người nghe
Xem thêm sự kiện;
hoạt động; 195 195197
Lung lay
ngoại lệ quy tắc đơn luồng;
190
Xử lý sự kiện swing; 194
danh sách
Xem thêm các bộ sưu tập;
CopyOnWriteArrayList
sử dụng ấn phẩm an toàn; 52
sử dụng mô hình dữ liệu theo phiên bản; 201
Danh sách liên kết ; 85
Danh sách
CopyOnWriteArrayList là con-
thay thế hiện tại; 84, 86

Trang 67
380
Mục lục
Luật nhỏ
khóa tranh chấp; 232 fn
sống động ; 219, 219
Xem thêm đồng thời / đồng thời,
lỗi; lòng ham muốn;
như thất bại sinh động; số 8
sự sống
Xem thêm hiệu suất; đáp ứng
sự thất bại;
nguyên nhân
Thấy bế tắc; sống động; nhỡ
tín hiệu; chết đói;
sự thất bại
tránh né; 205
rủi ro mua khóa không đúng cách; 61
lợi thế thuật toán nonblocking;
319
hiệu suất và
trong các dịch vụ có nhà nước; 29
an toàn so với
Xem an toàn;
định nghĩa thuật ngữ; số 8
thử nghiệm
tiêu chí; 248
mối nguy hiểm an toàn chủ đề cho; số 8
biến cục bộ
Xem thêm đóng gói; tiểu bang; thay đổi
ables;
cho sự giam cầm của chủ đề; 43
sử dụng ngăn xếp ngăn xếp; 44
địa phương, mất
như chi phí sử dụng luồng; số 8
Khóa ; 277 li , 277 Vang282
và Điều kiện ; 307
mua lại gián đoạn; 148
thời gian mua lại; 215
khóa (ing) ; 85
Xem thêm bị giam cầm; đóng gói;
@ GuardedBy ; sự an toàn; đồng bộ-
nation;
mua lại
Opera đồng bộ hóa dựa trên AQS-
tions; 311
rủi ro không đúng đắn, sinh động; 61
gián đoạn; 279 Chân281
nội tại, không gián đoạn
lý do ngăn chặn; 148
lồng nhau, như rủi ro bế tắc; 208
bỏ phiếu; 279
giao thức, giam cầm
sử dụng; 60
đếm khóa reentrant; 26
hẹn giờ; 279
và giam cầm; 59
biến nguyên tử so với.; 326 322329
tránh
đối tượng bất biến sử dụng; 49
xây dựng
Sử dụng AQS; 311
phía khách hàng; 72 Cung73, 73
và hành động ghép; 79 Gian82
đóng gói hàng đợi điều kiện
tác động vào; 306
quản lý lớp học; 150 fn
so với mở rộng lớp học; 73
thô cứng; 231
như tối ưu hóa JVM; 286
tác động đến việc chia tách đồng bộ
khối; 235 fn
quy tắc thiết kế đồng thời vai trò; 110
Chiến lược đồng thờiHashMap ; 85
Đồng thờiModificationException
tránh với; 82
biến điều kiện và điều kiện
mối quan hệ vị ngữ; 308
ganh đua
đo đạc; 240
giảm, hướng dẫn; 233
giảm, tác động; 211
giảm, chiến lược; 232 Cung242
tác động mở rộng của; 232
khớp nối; 282
phụ thuộc khóa tuần hoàn
như nguyên nhân bế tắc; 205
nhược điểm của; 319
hai lần kiểm tra
như mẫu lỗi đồng thời; 272
bầu cử; 231 fn
như tối ưu hóa JVM; 286
đóng gói của
tạo thuận lợi cho việc tái định cư; 27
độc quyền
thay thế cho; 239 con240
lựa chọn thay thế cho; 321
không có khả năng sử dụng, như đồng thời-
Nhược điểm HashMap ; 86
sử dụng khóa thời gian; 279
rõ ràng; 277 trận290
gián đoạn trong quá trình khóa
sử dụng tion; 148
độ chi tiết
Hiểu biết pháp luật của Amdahl; 229

Trang 68
Mục lục
381
giảm bớt; 235 con237
tay trong tay; 282
trong các hành động ngăn chặn; 292
nội tại; 25 , 25
mua lại, không gián đoạn
lý do ngăn chặn; 148
lợi ích của; 285
khóa rõ ràng so với.; 277 Gian278
điều kiện nội tại hàng đợi rela-
tionship đến; 297
hạn chế của; 28
khóa riêng so với.; 61
sử dụng đệ quy; 237 fn
ReentrantLock vs.
cân nhắc; 282 ngân286
lặp đi lặp lại
loại bỏ bộ sưu tập đồng thời
cần thiết cho; 85
nhược điểm của; 83
màn hình
Xem khóa nội tại;
không cấu trúc khối; 281 Tiết282
thuật toán không chặn so với.; 319
cuộc gọi mở
để tránh bế tắc; 211 Tua213
đặt hàng
rủi ro bế tắc; 206 con213
năng động, bế tắc dẫn đến
từ; 207 Khúc210
không nhất quán, như đa luồng
Vấn đề khung GUI; 190
riêng tư
khóa nội tại so với.; 61
giao thức
chia sẻ yêu cầu nhà nước cho; 28
đọc viết; 286
chiến lược thực hiện; 287
tái sinh
ngữ nghĩa; 26 Gian27
ngữ nghĩa, ReentrantLock capa-
khả năng thanh toán; 278
Tùy chọn công bằng ReentrantLock ;
283 Tuy285
giải phóng
trong khóa tay trong tay; 282
nhược điểm khóa nội tại;
278
ưu tiên, trong khóa đọc-ghi
thực hiện; 287
vai trò
chính sách đồng bộ hóa; 56
phạm vi
Xem thêm khóa (ing), độ chi tiết;
thu hẹp, như sự tranh chấp khóa
chiến lược cắt giảm; 233 con235
chia tách; 235
Hiểu biết pháp luật của Amdahl; 229
như giảm độ chi tiết khóa
chiến lược; 235
Ví dụ về ServerStatus ; 236 li
bảo vệ nhà nước với; 27 trận29
lột đồ; 237
Hiểu biết pháp luật của Amdahl; 229
Sử dụng đồng thờiHashMap ; 85
tước bỏ; 237
chủ đề thông tin về; 216
vấn đề an toàn chủ đề
trong các dịch vụ có nhà nước; 23 trận29
hẹn giờ; 215 Tua216
chưa được phát hành
như mẫu lỗi đồng thời; 272
tầm nhìn và; 36 Cung37
biến số biến động so với.; 39
chờ đợi
và vị ngữ điều kiện; 299
thuật toán khóa miễn phí ; 329
đăng nhập
Xem thêm thiết bị;
ngoại lệ
Ví dụ UEHLogger ; 163 li
dịch vụ
như ví dụ về việc dừng một chủ đề-
dịch vụ dựa trên; 150 trận155
ví dụ tùy biến chủ đề; 177
ThreadPoolExecutor móc cho; 179
trạng thái logic ; 58
vòng lặp / vòng lặp
và gián đoạn; 143
M
vòng lặp sự kiện chính
so với chủ đề công văn sự kiện; 5
Bản đồ
Đồng thờiHashMap là đồng thời
thay thế; 84
lợi thế về hiệu suất; 242
hoạt động nguyên tử; 86
tham số kích thước bể tối đa ; 172
đo đạc
tầm quan trọng của việc tối ưu hóa hiệu quả-
sự; 224
hiệu suất; 222

Trang 69
382
Mục lục
công cụ định hình; 225
khóa tranh chấp; 240
đáp ứng; 264 khó266
chiến lược và công cụ
công cụ định hình; 225
ThreadPoolExecutor móc cho; 179
ghi nhớ ; 103
Xem thêm bộ đệm / bộ đệm;
ký ức
Xem thêm tài nguyên;
rào cản; 230 , 338
cạn kiệt
tránh quá tải yêu cầu; 173
thử nghiệm cho; 257
vấn đề chính sách mỗi nhiệm vụ; 116
mô hình
kiến trúc phần cứng; 339
JMM; 337
sắp xếp lại
hoạt động; 339
chia sẻ bộ nhớ đa xử lý;
338
đồng bộ hóa
tác động hiệu quả của; 230 con231
tác động kích thước hồ bơi chủ đề; 171
hiển thị; 33 Gian39
Hiệu ứng ReentrantLock ; 277
hiệu quả đồng bộ ; 33
Hàng đợi không chặn Michael-Scott ;
332 trận335
tín hiệu bị bỏ lỡ ; 301, 301
Cũng thấy sự sống ;
như rủi ro thông báo duy nhất; 302
mô hình / mô hình
Xem thêm Mô hình bộ nhớ Java
(JMM); MVC (mô hình-xem-
bộ điều khiển) mẫu thiết kế;
đại diện; lượt xem;
Xử lý sự kiện
đối tượng xem mô hình; 195 fg
ký ức
kiến trúc phần cứng; 339
JMM; 337
mô hình-khung nhìn-trình điều khiển
rủi ro bế tắc; 190
ví dụ theo dõi xe; 61
lập trình
tuần tự; 2
chia sẻ dữ liệu
Xem thêm ví dụ trình kết xuất trang;
trong các ứng dụng GUI; 198 trục 202
sự đơn giản
chủ đề có lợi cho; 3
mô hình dữ liệu phân chia; 201 , 201
Xử lý sự kiện swing; 194
ứng dụng ba lớp
hiệu suất so với khả năng mở rộng; 223
mô hình dữ liệu phiên bản; 201
sửa đổi
đồng thời
bộ sưu tập đồng bộ
chanh với; 82
nhu cầu thường xuyên cho
bộ sưu tập sao chép không ghi
phù hợp với; 87
màn hình
Xem thêm mẫu màn hình Java;
ổ khóa
Xem khóa nội tại;
giám sát
Xem thêm thiết bị; đục lỗ
pháp sư; khả năng mở rộng; thử nghiệm;
công cụ;
Sử dụng CPU; 240
hiệu suất; 221 Nền245
ThreadPoolExecutor móc cho; 179
công cụ
đảm bảo chất lượng; 273
chuyển đổi cuộc gọi đơn hình
Sử dụng JVM; 268 fn
ứng dụng mpstat ; 240
Xem thêm đo lường; công cụ;
nhiều người đọc, khóa đơn
và khóa giảm tranh chấp; 239
khóa đọc-ghi; 286
hệ thống đa bộ xử lý
Xem thêm đồng thời / đồng thời;
bộ nhớ chia sẻ
mô hình bộ nhớ; 338
chủ đề sử dụng; 3
đa luồng
Xem thêm an toàn; đơn luồng (ed);
chủ đề;
Khung GUI
các vấn đề với; 189 Điện190
bất biến đa biến
và các biến nguyên tử; 325
yêu cầu nguyên tử; 57, 67
phụ thuộc, vấn đề an toàn chủ đề;
24
yêu cầu khóa cho; 29

Trang 70
Mục lục
383
bảo quản, như an toàn chủ đề
yêu cầu; 24
đột biến ; 15
các đối tượng
công bố an toàn; 54
tiểu bang
quản lý truy cập, như chủ đề
mục tiêu an toàn; 15
mutexes (khóa loại trừ lẫn nhau) ; 25
sử dụng semaphore nhị phân như; 99
khóa nội tại như; 25
Khả năng ReentrantLock; 277
Mẫu MVC (model-view-controller)
rủi ro bế tắc; 190
ví dụ theo dõi xe sử dụng; 61
N
thu hẹp
phạm vi khóa
như giảm sự tranh chấp
chiến lược; 233 con235
mã nguồn
sử dụng hoàn thiện và hạn chế; 165
dẫn đường
như hành động ghép
trong hoạt động thu gom; 79
newTaskFor ; 126 li
đóng gói hủy bỏ không chuẩn
lation; 148
hoạt động 64 bit nonatomic ; 36
thuật toán không chặn ; 319 , 329 , 329
336
tầm quan trọng của backoff cho; 231 fn
đồng bộ hóa; 319
Đồng bộ hóa giá trị ; 174 fn
sử dụng bộ đếm an toàn chủ đề; 322 322
semaphores nonfair
lợi ích của; 265
thông báo ; 302
Xem thêm chặn; điều kiện, hàng đợi;
sự kiện); người nghe; thông báo ;
thông báoTất cả ; ngủ; chờ đợi (s);
thức dậy;
hoàn thành
của nhiệm vụ GUI chạy dài; 198
có điều kiện; 303
như tối ưu hóa; 303
sử dụng; 304 li
lỗi
như mẫu lỗi đồng thời; 272
hệ thống thông báo sự kiện
sao chép bộ sưu tập sao chép-
Tage; 87
thông báo
như tối ưu hóa; 303
hiệu quả của; 298 fn
bỏ lỡ rủi ro tín hiệu; 302
thông báoTất cả so với.; 302
vấn đề an toàn phân lớp
tầm quan trọng của tài liệu; 304
hướng dẫn sử dụng; 303
thông báo tất cả
thông báo so với.; 302
@NotThreadSafe ; 6, 353
Gói chủ đề NPTL
Sử dụng Linux; 4 fn
bỏ tham chiếu bộ nhớ
sử dụng thử nghiệm; 257
Ôi
các đối tượng)
Xem thêm tài nguyên;
sáng tác; 55 Led78
điều kiện
rõ ràng; 306
hiệu quả bất biến; 53
bảo vệ; 54
bất biến; 46
an toàn khởi tạo; 51
xuất bản sử dụng không ổn định; 48 Cung49
đột biến
công bố an toàn; 54
bể bơi
sử dụng phù hợp; 241 fn
giới hạn, quản lý semaphore-
tinh thần của; 99
nhược điểm của; 241
sử dụng kết nối chủ đề nối tiếp; 90
người giới thiệu
và giam cầm ngăn xếp; 44
chia sẻ; 33 trận54
tiểu bang; 55
các thành phần của; 55
Lung lay
giam cầm sợi chỉ; 191 Gian192
các đối tượng
bảo vệ; 28
mở cuộc gọi ; 211 , 211 Tiếng213
Xem thêm đóng gói;
các hệ điều hành
sử dụng đồng thời
vai trò lịch sử; 1

Trang 71
384
Mục lục
hoạt động
64-bit, tính chất không gây dị ứng của; 36
phụ thuộc vào nhà nước; 57
quản lý đồng thời lạc quan
Xem các biến nguyên tử; CAS; không chặn
thuật toán ing;
tối ưu hóa
trình biên dịch
như cạm bẫy thử nghiệm hiệu suất;
268 trận270
JVM
cạm bẫy; 38 fn
chiến lược; 286
tranh chấp khóa
sự va chạm; 231
chiến lược giảm thiểu; 232 Cung242
hiệu suất
Luật của Amdahl; 225 con2222
sinh non, tránh; 223
câu hỏi về; 224
yêu cầu về khả năng mở rộng so với.; 222
kỹ thuật
Xem thêm sự biến đổi nguyên tử; không
chặn đồng bộ hóa;
điều kiện xếp hàng sử dụng; 297
thông báo có điều kiện; 303
đặt hàng
Xem thêm sắp xếp lại; đồng bộ hóa;
mua lại, trong ReentrantRead-
Viết khóa ; 317 fn
tổng kiểm
sử dụng thử nghiệm an toàn; 253
VÒI
tác động của người gọi depen-
xử lý dence trên; 294 fn
Khóa
rủi ro bế tắc; 206 con213
rủi ro bế tắc năng động; 207 Khúc210
không nhất quán, như đa luồng
Vấn đề khung GUI; 190
hoạt động
vai trò đồng bộ hóa; 35
một phần; 340 fn
xảy ra - trước, định nghĩa JMM;
340 lăng342
xảy ra - trước đây, cõng;
3433344
xảy ra-trước, xuất bản con-
trình tự; 244 Cung249
thay đổi dựa trên hiệu suất trong
rủi ro an toàn chủ đề; 7
toàn bộ
hành động đồng bộ hóa; 341
trật tự tắt máy ; 164
Lỗi bộ nhớ
rủi ro tạo chủ đề không giới hạn; 116
trên không
Xem thêm sử dụng CPU; đo lường-
tinh thần; hiệu suất;
tác động của
Xem hiệu suất; thông lượng;
giảm
Xem các thuật toán không chặn; op
thời gian hóa; chủ đề, hồ bơi;
nguồn
Xem chặn / chặn; ganh đua;
chuyển ngữ cảnh; đa
môi trường ren;
sự an toàn; Huyền phù; đồng bộ-
nation; chủ đề, vòng đời;
quyền sở hữu
chia sẻ; 58
chia nhỏ; 58
tiểu bang
vấn đề thiết kế lớp học; 57 con58
chủ đề; 150
P
ví dụ trình kết xuất trang
Xem thêm mô hình / mô hình, chia sẻ
dữ liệu;
phân vùng nhiệm vụ không đồng nhất; 127
129
phân tích song song; 124 Cạn133
thực hiện tuần tự; 124 -127
song song / song song
Xem thêm đồng thời / đồng thời;
Mẫu trang trí;
phân tích ứng dụng; 123 ăn133
nhiệm vụ không đồng nhất; 127 hạ 129
thuật toán lặp
quản lý rào cản của; 99
khung giải câu đố; 183
thuật toán đệ quy; 181
tuần tự hóa
Luật của Amdahl; 225 con2222
phân rã liên quan đến nhiệm vụ; 113
chính sách mỗi nhiệm vụ; 115
đặt hàng một phần ; 340 fn
xảy ra trước
và xuất bản; 244 Cung249
Định nghĩa JMM; 340

Trang 72
Mục lục
385
cõng; 3433344
phân vùng
như chiến lược song song; 101
thụ động
ảnh hưởng đến HttpSession thread-
yêu cầu an toàn; 58 fn
ứng dụng perfbar
Xem thêm đo lường; công cụ;
Đo lường hiệu suất CPU; 261
đo lường hiệu suất sử dụng; 225
ứng dụng perfmon ; 240
Xem thêm đo lường; công cụ;
Đo lường I / O; 240
sử dụng đo lường hiệu suất; 230
hiệu suất ; 8 , 221 , 221 Từ245
Xem thêm đồng thời / đồng thời;
lòng ham muốn; khả năng mở rộng; xuyên qua-
đặt; sử dụng;
và các nhiệm vụ không đồng nhất; 127
và các đối tượng bất biến; 48 fn
và quản lý tài nguyên; 119
biến nguyên tử
khóa so với.; 326 322329
vấn đề thực hiện bộ đệm; 103
mở rộng chức năng thành phần
cơ chế; 74 fn
chi phí
chính sách mỗi nhiệm vụ; 116
khóa công bằng so với nonfair; 284
mối nguy hiểm
Xem thêm trên cao; ưu tiên,
đảo ngược;
Tương tác JVM với phần cứng
sắp xếp lại; 34
sự sống
trong các dịch vụ có nhà nước; 29
khóa
trong quá trình lặp lại tác động vào; 83
sự đo lường của; 222
Xem thêm năng lực; hiệu quả; la-
sự khéo léo; khả năng mở rộng; dịch vụ
thời gian; thông lượng;
khóa so với biến nguyên tử; 327
329
rào cản bộ nhớ tác động vào; 230
thông báoTất cả tác động vào; 303
tối ưu hóa
Xem thêm sử dụng CPU; heo con-
ủng hộ;
Luật của Amdahl; 225 con2222
thực hành xấu; 349 Tiếng349
Hoạt động dựa trên CAS; 323
chiến lược giảm thiểu; 232 Cung242
ví dụ trình kết xuất trang với Com-
dịch vụ pletion
cải tiến; 130
mô hình sản xuất-tiêu dùng advan-
Tage; 90
lợi thế khóa đọc-ghi; 286
ReentrantLock so với khóa nội tại;
282 ngân286
yêu cầu
tác động an toàn chủ đề; 16
khả năng mở rộng so với.; 222 bóng223
các vấn đề, ứng dụng ba lớp
mô hình như minh họa; 223
khóa giảm độ chi tiết; 239
vấn đề tổng hợp đối tượng; 241
xử lý sự kiện tuần tự; 191
đơn giản so với
trong tái cấu trúc đồng bộ hóa
khối; 34
phạm vi khối đồng bộ ; 30
Đồng bộ hóa giá trị ; 174 fn
kỹ thuật để cải thiện
biến nguyên tử; 319
thuật toán không chặn; 319
thử nghiệm; 247 Mây274
tiêu chí; 248
bàn thắng; 260
cạm bẫy, tránh né; 266 Cung270
hồ bơi
tác động kích thước; 170
điều chỉnh; 171 Từ179
mối nguy hiểm an toàn chủ đề cho; số 8
thay đổi thời gian và đặt hàng cho
rủi ro an toàn chủ đề; 7
đánh đổi
đánh giá của; 223 Tua225
sự cho phép
cơ sở mã
và nhà máy luồng tùy chỉnh; 177
giấy phép ; 98
Xem thêm semaphores;
quản lý đồng thời bi quan
Xem khóa (ing), độc quyền;
cõng ; 344
về đồng bộ hóa; 3433344
điểm
rào chắn; 99
hủy bỏ; 140
Trang 73
386
Mục lục
độc
thông điệp; 219
Xem thêm livelock;
Viên thuốc; 155 , 155
Xem thêm vòng đời; tắt;
Trình thu thập thông tin ; 157 li
IndexerThread ; 157 li
Dịch vụ lập chỉ mục ; 156 li
tắt hàng đợi không giới hạn
với; 155
chính sách
Xem thêm thiết kế; tài liệu;
hướng dẫn; giao thức (s);
chiến lược;
ứng dụng
lợi thế nhóm chủ đề; 120
hủy bỏ; 136
cho các nhiệm vụ, gián đoạn chủ đề
mối quan hệ chính sách với; 141
lợi thế gián đoạn như im-
chiến lược mạ vàng; 140
chấp hành
thiết kế, các yếu tố ảnh hưởng; 167
Giám đốc điều hành , cho ThreadPoolExec-
cấu hình utor ; 171
khớp nối ngầm giữa các nhiệm vụ
và; 16710170
phân tích song song cho; 123 ăn133
bài tập; 118 ăn119
nhiệm vụ, hiệu suất ứng dụng
tầm quan trọng; 113
gián đoạn; 141 , 141 Tiếng142
bão hòa; 174 mỏ175
Bảo vệ
xử lý chủ đề tùy chỉnh nhà máy;
177
tuần tự
thực hiện nhiệm vụ; 114
chia sẻ đối tượng; 54
đồng bộ hóa; 55
yêu cầu, tác động đến lớp học
sự mở rộng; 71
yêu cầu, tác động đến lớp học
sửa đổi; 71
chia sẻ yêu cầu nhà nước cho; 28
lập kế hoạch nhiệm vụ
tuần tự; 114
hồ bơi chủ đề; 117
lợi thế nhóm chủ đề hơn
luồng trên mỗi nhiệm vụ; 121
luồng trên mỗi nhiệm vụ; 115
giam cầm sợi chỉ; 43
bỏ phiếu
ngăn chặn các hành động phụ thuộc vào nhà nước;
295 bóng296
cho gián đoạn; 143
mua lại khóa; 279
hồ bơi
Xem thêm tài nguyên;
vật
sử dụng phù hợp; 241 fn
giới hạn, sử dụng semaphore; 99
nhược điểm của; 241
sử dụng kết nối chủ đề nối tiếp; 90
nguồn
sử dụng semaphore; 98
tác động kích thước hồ bơi chủ đề; 171
kích thước
cốt lõi; 171 , 172 fn
tối đa; 172
chủ đề; 119 -121
thêm số liệu thống kê vào; 179
ứng dụng; 167
như thiết kế sản xuất-tiêu dùng; 88
như quản lý tài nguyên luồng
cơ chế; 117
sử dụng gọi lại trong thử nghiệm; 258
kết hợp với hàng đợi làm việc, trong
Khung thi công; 119
cấu hình sau xây dựng
Thao tác; 177 Con179
cấu hình hàng đợi nhiệm vụ; 172 Con174
sáng tạo; 120
rủi ro bế tắc; 215
phương pháp nhà máy cho; 171
kích thước; 170 con171
xử lý ngoại lệ không bị bắt;
163
cổng thông tin
ví dụ nhiệm vụ thời gian; 131 ăn133
hậu điều
Xem thêm bất biến (s);
bảo quản
cơ chế và đồng bộ-
vai trò chính sách tion; 55 trận56
vai trò an toàn chủ đề; 17
điều kiện tiên quyết
Xem thêm phụ thuộc, nhà nước; invari-
con kiến;
điều kiện vị ngữ như; 299
sự thất bại
xử lý bộ đệm giới hạn của; 292

Trang 74
Mục lục
387
tuyên truyền cho người gọi; 292 Gian295
dựa trên nhà nước
trong các lớp học phụ thuộc nhà nước; 29
sự quản lý; 57
dự đoán
Xem thêm đáp ứng;
đo lường; 264 khó266
gián đoạn ưu tiên
lý do khấu hao; 135 fn
thuyết trình
Xem GUI;
nguyên thủy
biến cục bộ, an toàn của; 44
lớp bao bọc
các lớp vô hướng nguyên tử so với.; 325
ưu tiên
đảo ngược; 320
tránh, không chặn algo-
lợi thế của rithm; 329
chủ đề
thao túng, nguy hiểm sinh lực;
218
khi nào sử dụng; 219
Ưu tiênBlockingQueue ; 89
sử dụng hồ bơi của; 173 Tháp174
Ưu tiên hàng đầu ; 85
riêng tư
xây dựng thành ngữ bắt; 69 fn
ổ khóa
Mẫu màn hình Java so với.; 61
xác suất
sử dụng tránh bế tắc với thời gian
và khóa bỏ phiếu; 279
quyết định so với
trong các chương trình đồng thời; 247
quá trình (es) ; 1
cơ chế truyền thông; 1
nhẹ
Xem chủ đề;
chủ đề so với.; 2
mô hình sản xuất-tiêu dùng
và chức năng thực thi
trong Hoàn thành Dịch vụ ; 129
chặn hàng đợi và; 87 Cung92
sử dụng bộ đệm giới hạn; 292
điều khiển dòng chảy
chặn hàng đợi sử dụng; 94
Sử dụng khung thi công; 117
điều kiện chờ bệnh lý;
300 fn
kiểm tra năng suất; 261
kiểm tra an toàn; 252
ăn cắp công việc vs.; 92
hồ sơ
Xem thêm đo lường;
Sử dụng JVM; 320 fn
công cụ
khóa phát hiện tranh chấp; 240
đo lường hiệu suất; 225
đảm bảo chất lượng; 273
lập trình
mô hình
tuần tự; 2
chỉ dẫn tiến độ
Xem thêm GUI;
trong nhiệm vụ GUI chạy dài; 198
Lan truyền
ngoại lệ gián đoạn; 142
giao thức
Xem thêm tài liệu; chính sách;
chiến lược;
Nhập cảnh và xuất cảnh
hoạt động phụ thuộc nhà nước; 306
mua lại khóa
sử dụng giam cầm; 60
khóa
chia sẻ yêu cầu nhà nước cho; 28
xử lý tình trạng chủng tộc; 21
giam cầm
bảo quản nguyên tử với
mở cuộc gọi; 213
pthreads (chủ đề POSIX)
hành vi khóa mặc định; 26 fn
xuất bản ; 39
Xem thêm bị giam cầm; tài liệu-
sự; đóng gói; chia sẻ;
thoát và; 39 trận42
không đúng cách; 51 , 50 bóng51
Hỗ trợ JMM; 244 Cung249
của các đối tượng bất biến
sử dụng dễ bay hơi; 48 Cung49
an toàn; 346
thành ngữ cho; 52 Mây53
trong tạo nhiệm vụ; 126
của các đối tượng đột biến; 54
sử dụng kết nối chủ đề nối tiếp; 90
hướng dẫn an toàn; 49 con54
biến trạng thái
an toàn, yêu cầu cho; 68
không an toàn; 344 Từ346

Trang 75
397
Mục lục
hoạt động put-if-vắng mặt
Xem thêm hành động ghép;
như hành động ghép
yêu cầu nguyên tử; 71
hỗ trợ thu đồng thời cho; 84
khung giải câu đố
làm ví dụ song song; 183
Q
đảm bảo chất lượng
Xem thêm thử nghiệm;
chiến lược; 270 Gian274
chất lượng dịch vụ
đo lường; 264
yêu cầu
và chính sách thực thi nhiệm vụ; 119
Xếp hàng ; 84 Cung85
hàng đợi
Xem thêm cấu trúc dữ liệu;
chặn; 87 Cung94
hủy bỏ, vấn đề; 138
hủy bỏ, giải pháp; 140
Dịch vụ hoàn thành như; 129
mô hình sản xuất-tiêu dùng và;
87 Cung92
giới hạn
chính sách bão hòa; 174 mỏ175
điều kiện; 297
chặn opera phụ thuộc vào nhà nước-
sử dụng tions; 296
nội tại; 297
nội tại, nhược điểm của; 306
HÒA; 89
thực hiện
sự khác biệt nối tiếp; 227
ưu tiên đặt hàng; 89
đồng bộ
hạn chế thiết kế; 89
sử dụng hồ bơi của; 173
bài tập
sử dụng hồ bơi của; 172 Con174
không giới hạn
tắt thuốc độc; 156
sử dụng; 298
công việc
trong nhóm chủ đề; 88, 119
R
điều kiện chủng tộc ; 7 , 20
Xem thêm đồng thời / đồng thời,
lỗi; dữ liệu, chủng tộc; thời gian / thời gian
ing;
tránh
sử dụng đối tượng bất biến; 48
trong dịch vụ dựa trên luồng
xuống; 153
trong khung GUI; 189
trong ví dụ trình thu thập dữ liệu web
idempotence như giảm nhẹ cir-
tích lũy; 161
ngẫu nhiên)
sử dụng độ phân giải livelock; 219
thế hệ số giả
khả năng mở rộng; 326 322329
kiểm tra sử dụng tạo dữ liệu; 253
khả năng tiếp cận
xuất bản bị ảnh hưởng bởi; 40
thao tác đọc-sửa-ghi
Xem thêm hành động ghép;
như hoạt động phi nguyên tử; 20
khóa đọc-ghi ; 286
ĐọcWriteLock ; 286 li
khóa độc quyền so với.; 239
Chiêu quân
Xem chấm dứt;
cổng chủ đề có thể đóng lại ; 304
phục hồi, bế tắc
Thấy bế tắc, phục hồi;
đệ quy
Xem thêm kiểm soát dòng chảy; lặp / itera-
sự;
mua lại khóa nội tại; 237 fn
song song; 181
Xem thêm mẫu trang trí;
reentrant / reentrancy ; 26
và khóa đọc-ghi; 287
khóa ngữ nghĩa; 26 Gian27
Khả năng ReentrantLock ; 278
mua lại khóa trên mỗi luồng; 26 Gian27
ReentrantLock ; 277 Gian282
ReentrantLock
Sử dụng AQS; 314 con315
khóa nội tại vs.
hiệu suất; 282 ngân286
Khóa thực hiện; 277 Gian282
tạo số ngẫu nhiên bằng cách sử dụng;
327 li
Mối quan hệ semaphore với; 308

Trang 76
Mục lục
389
ReentrantReadWriteLock
Sử dụng AQS; 316
reentrant khóa ngữ nghĩa; 287
người giới thiệu
phòng ngừa giam cầm ngăn xếp; 44
phản ánh
sử dụng cập nhật trường nguyên tử; 335
xử lý từ chối
ExecutorService sau khi chấm dứt
xử lý công việc; 121
khung giải câu đố; 187
RejectionExecutException
hủy bỏ chính sách sử dụng bão hòa; 174
xử lý công tác sau chấm dứt; 122
sử dụng khung giải câu đố; 187
RejectionExecutHandler
và chính sách bão hòa; 174
giải phóng
Hoạt động đồng bộ hóa AQS; 311
Khóa
trong khóa tay trong tay; 282
nhược điểm khóa nội tại;
278
tùy chọn trong khóa đọc-ghi
thực hiện; 287
mô hình lỗi khóa chưa phát hành; 271
giấy phép
quản lý semaphore; 98
vật từ xa
mối quan tâm an toàn chủ đề; 10
hoạt động loại bỏ-nếu-bằng
như hoạt động thu thập nguyên tử; 86
sắp xếp lại ; 34
Xem thêm bế tắc; tối ưu hóa; hoặc là-
der (ing); đặt hàng; đồng bộ-
nation; thời gian / thời gian;
khởi tạo giới hạn an toàn; 350
ký ức
tác động rào cản trên; 230
hoạt động; 339
cảnh báo biến động; 38
hoạt động thay thế nếu bằng
như hoạt động thu thập nguyên tử; 86
đại diện
Xem thêm thuật toán; thiết kế; tài liệu-
đề cập; Những trạng thái);
hoạt động
nhiệm vụ sử dụng cho; 113
vai trò thiết kế thuật toán; 104
nhiệm vụ mang kết quả; 125
bài tập
vòng đời, tương lai sử dụng cho; 125
Runnable sử dụng cho; 125
với Tương lai ; 126
chủ đề; 150
yêu cầu
làm gián đoạn
chiến lược xử lý; 140
yêu cầu
Xem thêm các hạn chế; thiết kế; tài liệu-
đề cập; hiệu suất;
bê tông
tầm quan trọng cho hiệu quả
tối ưu hóa mance; 224
kiểm tra đồng thời
Ví dụ TCK; 250
sự quyết tâm
tầm quan trọng của; 223
biến trạng thái độc lập; 66 Cung67
hiệu suất
Hiểu biết pháp luật của Amdahl; 229
tác động an toàn chủ đề; 16
đồng bộ hóa
chính sách đồng bộ hóa
nent; 56 bóng57
tài liệu chính sách đồng bộ hóa-
sự; 74 Cung77
cạn kiệt tài nguyên, ngăn chặn
sử dụng hàng đợi giới hạn; 173
chính sách thực thi như công cụ cho; 119
chiến lược thử nghiệm; 257
rủi ro kích thước nhóm chủ đề; 170
tài nguyên)
Xem thêm CPU; thiết bị đo đạc; mem-
ory; các đối tượng); bể bơi; tận dụng-
sự;
truy cập
như nhiệm vụ GUI chạy dài; 195
ràng buộc; 221
tiêu dùng
mối nguy hiểm an toàn chủ đề cho; số 8
bế tắc; 213 Tua215
cạn kiệt
vấn đề chính sách mỗi nhiệm vụ; 116
tăng
mối quan hệ khả năng mở rộng để; 222
rò rỉ
thử nghiệm cho; 257
sự quản lý
Xem thêm thiết bị; thử nghiệm;
nhà triết học ăn uống
lem;

Trang 77
390
Mục lục
chặn lợi thế hàng đợi; 88
chính sách thực thi là công cụ cho; 119
Sử dụng khung thi công; 117
sử dụng hoàn thiện và hạn chế; 165
xuống cấp duyên dáng, bão hòa
lợi thế chính sách; 175
xử lý công việc dài hạn; 170
chính sách bão hòa; 174 mỏ175
thực hiện nhiệm vụ đơn luồng
nhược điểm; 114
thử nghiệm; 257
hồ bơi chủ đề; 117
hồ bơi chủ đề, lợi thế; 121
nhóm chủ đề, điều chỉnh; 171 Từ179
chính sách mỗi tác vụ disadvan-
Tage; 116
chủ đề, tác động thời gian sống
trên; 172
xử lý công việc đúng thời gian; 131
hiệu suất
phân tích, giám sát và im-
chứng minh; 221 Nền245
bể bơi
sử dụng semaphore; 98
tác động kích thước hồ bơi chủ đề; 171
sử dụng
Luật của Amdahl; 225
như động lực đồng thời; 1
nhiệm vụ đáp ứng thời gian-senstive
hàm ý chính sách thực thi; 168
đáp ứng
Xem thêm bế tắc; GUI; sống động; trực tiếp-
không; hiệu suất;
như tiêu chí kiểm tra hiệu suất; 248
điều kiện hàng đợi lợi thế; 297
hiệu quả so với
tần suất bỏ phiếu; 143
chính sách gián đoạn
Gián đoạn ngoại lệ advan-
Tage; 142
nhiệm vụ dài hạn
sự điều khiển; 170
đo lường; 264 khó266
ví dụ trình kết xuất trang với Com-
dịch vụ pletion
cải tiến; 130
hiệu suất
phân tích, giám sát và im-
chứng minh; 221 Nền245
nghèo
nguyên nhân và giải quyết; 219
an toàn so với
duyên dáng so với tắt máy đột ngột;
153
hạn chế thực hiện tuần tự; 124
ứng dụng máy chủ
tầm quan trọng của; 113
thực hiện đơn luồng disad-
thuận lợi; 114
tác động đến giấc ngủ; 295
chủ đề
điều chỉnh hồ bơi, ThreadPoolExecut-
hoặc sử dụng; 171 Từ179
yêu cầu tác động quá tải; 173
mối nguy hiểm an toàn cho; số 8
Khôi phục tình trạng gián đoạn ; 142
các kết quả)
chốt cửa
sử dụng khung câu đố; 184
bộ nhớ cache
xây dựng; 101 Gian109
Callable xử lý; 125
Callable sử dụng thay vì Runnable ;
95
phụ thuộc
nhiệm vụ tự do từ, tầm quan trọng
của; 113
Xử lý trong tương lai ; 125
sự điều khiển
như nguồn tuần tự hóa; 226
không liên quan
như lý do hủy bỏ; 136, 147
nhiệm vụ không trả lại giá trị; 125
Runnable hạn chế; 125
thử lại
tính ngẫu nhiên, trong độ phân giải livelock;
219
trả về giá trị
Runnable hạn chế; 125
tái sử dụng
các lớp an toàn chủ đề hiện có
chiến lược và rủi ro; 71
RMI (Gọi phương thức từ xa)
sử dụng chủ đề; 9, 10
mối quan tâm an toàn và; 10
chủ đề lợi ích cho; 4
sự mạnh mẽ
Cũng thấy mong manh; sự an toàn;
chặn lợi thế hàng đợi; 88
Lợi thế gián đoạn ngoại lệ ;
142
lợi thế nhóm chủ đề; 120

Trang 78
Mục lục
391
quy tắc
Xem thêm hướng dẫn; chính sách; chiến lược-
gies;
xảy ra - trước đó; 341
Chạy được
xử lý các trường hợp ngoại lệ trong; 143
hạn chế đại diện nhiệm vụ; 125
đang chạy
Nhà nước thực thi dịch vụ ; 121
Nhà nước FutureTask ; 95
thời gian chạy
thay đổi thời gian và đặt hàng bằng cách
rủi ro an toàn chủ đề; 7
RuntimeException
như sợi gây ra cái chết; 161
Callable xử lý; 98
bắt
nhược điểm của; 161
S
sự an toàn
Xem thêm đóng gói; bất biến
các đối tượng; đồng bộ hóa;
chủ đề, giam cầm;
vấn đề thực hiện bộ đệm; 104
khởi tạo
đảm bảo cho sự bất biến
jects; 51
thành ngữ cho; 346 Tiếng348
Hỗ trợ JMM; 349
sống so với.; 205
sự xuất bản
thành ngữ cho; 52 Mây53
trong tạo nhiệm vụ; 126
của các đối tượng đột biến; 54
phản ứng với
Như duyên dáng so với tắt máy đột ngột;
153
chia tách mối quan tâm sở hữu; 58
vấn đề phân lớp; 304
thử nghiệm; 252 cạn257
bàn thắng; 247
đánh đổi
tối ưu hóa hiệu suất
chiến lược; 223 212222
hành vi mã không tin cậy
cơ chế bảo vệ; 161
bão hòa
chính sách; 174 mỏ175
khả năng mở rộng ; 222 , 221 Tiếng245
thuật toán
kiểm tra so sánh; 263 thuật264
Hiểu biết pháp luật của Amdahl; 229
như tiêu chí kiểm tra hiệu suất; 248
tác động khóa phía khách hàng trên; 81
bộ sưu tập đồng thời so với synchro-
bộ sưu tập nized; 84
Lợi thế đồng thờiHashMap ; 85,
242
Giám sát sử dụng CPU; 240
tăng cường
giảm tranh chấp khóa; 232 Quảng
242
vấn đề nhiệm vụ không đồng nhất; 127
tác động trường nóng trên; 237
khóa nội tại so với ReentrantLock
hiệu suất; 282 ngân286
phạm vi khóa tác động vào; 233
khóa trong rủi ro lặp lại của; 83
chiến lược cuộc gọi mở tác động vào; 213
hiệu suất so với.; 222 bóng223
khóa giảm độ chi tiết; 239
vấn đề tổng hợp đối tượng; 241
mô hình ứng dụng ba lớp như
hình minh họa; 223
thực hiện hàng đợi
sự khác biệt nối tiếp; 227
bộ đệm kết quả
xây dựng; 101 Gian109
tác động nối tiếp vào; 228
kỹ thuật để cải thiện
biến nguyên tử; 319
thuật toán không chặn; 319
thử nghiệm; 261
mối nguy hiểm an toàn chủ đề cho; số 8
dưới sự tranh chấp
là lợi thế của AQS; 311
Lên lịchThreadPoolExecutor
như thay thế Timer ; 123
lập kế hoạch
trên không
tác động hiệu quả của; 222
rủi ro thao tác ưu tiên; 218
nhiệm vụ
chính sách tuần tự; 114
chính sách mỗi nhiệm vụ; 115
chủ đề là đơn vị cơ bản của; 3
ăn cắp công việc
deques và; 92

Trang 79
392
Mục lục
phạm vi / phạm vi
Xem thêm độ chi tiết;
hộp đựng
mối quan tâm an toàn chủ đề; 10
ganh đua
giới hạn biến nguyên tử của; 324
thoát
xuất bản làm cơ chế cho; 39
Khóa
thu hẹp, như sự tranh chấp khóa
chiến lược cắt giảm; 233 con235
khối đồng bộ ; 30
Tìm kiếm
đầu tiên sâu
chiều rộng tìm kiếm đầu tiên so với.; 184
song song hóa; 181 Hậu182
Chính sách bảo mật
và nhà máy luồng tùy chỉnh; 177
Bộ chọn
chặn không gián đoạn; 148
ngữ nghĩa
Xem thêm tài liệu; đại diện-
sự;
mảng nguyên tử; 325
ngữ nghĩa nhị phân; 99
lĩnh vực cuối cùng; 48
của sự gián đoạn; 93
của môi trường đa luồng
Xem xét biến ThreadLocal-
tions; 46
khóa reentrant; 26 Gian27
Khả năng ReentrantLock ; 278
ReentrantReadWriteLock capa-
khả năng thanh toán; 287
chưa xác định
của Thread.yield ; 218
dễ bay hơi ; 39
lặp lại nhất quán yếu; 85
trong-thread-as-if-serial; 337
Semaphore ; 98
Sử dụng AQS; 315 Led316
sử dụng ví dụ; 100 li , 176 li , 249 li
trong ví dụ BoundedBuffer ; 248
sử dụng chính sách bão hòa; 175
điểm tương đồng với ReentrantLock ; 308
quản lý điều kiện tiên quyết dựa trên nhà nước-
tinh thần với; 57
ngữ nghĩa ; 98 , 98
như cơ chế phối hợp; 1
nhị phân
sử dụng mutex; 99
đếm; 98
giấy phép, mối quan hệ chủ đề;
248 fn
Ví dụ SemaphoreOnLock ; 310 li
công bằng so với nonfair
so sánh hiệu suất; 265
nonfair
lợi ích của; 265
ví dụ sendOnSharedLine ; 281 li
tuần tự / tuần tự
Xem thêm đồng thời / đồng thời;
không đồng bộ so với.; 2
Tính nhất quán; 339
xử lý sự kiện
trong các ứng dụng GUI; 191
chấp hành
của các nhiệm vụ; 114
song song hóa; 181
chiến lược đóng cửa có trật tự; 164
ví dụ trình kết xuất trang; 124 Quảng 127
mô hình lập trình; 2
chính sách thực thi nhiệm vụ; 114
kiểm tra, giá trị trong kiểm tra đồng thời;
250
chủ đề mô phỏng của; 4
nối tiếp / tuần tự hóa
truy cập
tuần tự hóa đối tượng so với.; 27 fn
sử dụng khóa thời gian; 279
Công nhânThread ; 227 li
độ chi tiết
tác động thông lượng; 228
ảnh hưởng đến HttpSession thread-
yêu cầu an toàn; 58 fn
song song với
Luật của Amdahl; 225 con2222
tác động mở rộng; 228
giam cầm chủ đề nối tiếp; 90 , 90 bóng92
nguồn
xác định, hiệu suất
sự va chạm; 225
người phục vụ
Xem thêm khách hàng;
các ứng dụng
giảm chuyển đổi ngữ cảnh; 243 Cẩu
244
vấn đề thiết kế; 113
dịch vụ
Xem thêm các ứng dụng; khung;
đăng nhập

Trang 80
Mục lục
393
như ví dụ dịch vụ dựa trên luồng;
150 trận155
tắt
như lý do hủy bỏ; 136
dựa trên chủ đề
dừng lại; 150 trận161
người phục vụ
khung
yêu cầu an toàn ren; 10
chủ đề lợi ích cho; 4
vấn đề an toàn, chủ đề
nguyên tử; 19 trận23
sự sống và hiệu suất; 29
khóa; 23 trận29
không quốc tịch
như ví dụ an toàn luồng; 18 con19
đối tượng phạm vi phiên
mối quan tâm an toàn chủ đề; 10
bộ
Xem thêm bộ sưu tập;
Ví dụ BoundedHashset ; 100 li
CopyOnWriteArraySet
như đồng bộ Đặt thay thế-
tinh thần; 86
sử dụng ấn phẩm an toàn; 52
PersonSet dụ; 59 li
Sắp xếp
Đồng thờiSkipListSet là con-
thay thế hiện tại; 85
Cây cối
Đồng thờiSkipListSet là con-
thay thế hiện tại; 85
chia sẻ / chia sẻ ; 15
Xem thêm đồng thời / đồng thời;
sự xuất bản;
dữ liệu
Xem thêm ví dụ trình kết xuất trang;
phối hợp truy cập, khóa rõ ràng
sử dụng; 277 trận290
mô hình, ứng dụng GUI han-
cưng chiều; 198 trục 202
chi phí đồng bộ hóa; số 8
lợi thế chủ đề so với pro-
chấm dứt; 2
cấu trúc dữ liệu
như nguồn tuần tự hóa; 226
ký ức
như cơ chế phối hợp; 1
bộ nhớ đa xử lý
mô hình bộ nhớ; 338
đối tượng đột biến
hướng dẫn; 54
các đối tượng; 33 trận54
mô hình dữ liệu phân chia; 20120202
tiểu bang
quản lý truy cập, như chủ đề
mục tiêu an toàn; 15
chiến lược
ExecutorCompletionService
sử dụng; 130
chủ đề
sự cần thiết và nguy hiểm trong GUI
các ứng dụng; 189 Điện190
biến dễ bay hơi như cơ chế cho;
38
tắt
Xem thêm vòng đời;
đột ngột
JVM, kích hoạt cho; 164
hạn chế; 158 Con161
như lý do hủy bỏ; 136
hủy bỏ và; 135 con166
Nhà nước thực thi dịch vụ ; 121
duyên dáng so với sự đánh đổi đột ngột; 153
móc; 164
trong trật tự tắt máy; 164 trận đấu 165
JVM; 164 Điện166
và chủ đề daemon; 165
của các dịch vụ dựa trên luồng; 150 trận161
có trật tự; 164
chiến lược
đóng gói phương pháp vòng đời;
155
ví dụ dịch vụ khai thác gỗ; 150 ngân hàng
155
thi cử một lần
ple; 156 Gian158
ủng hộ
Ví dụ LifecyclWebServer ;
122 li
tắt máy ; 121
dịch vụ đăng nhập tắt máy thay đổi-
cơn giận dữ; 153
tắt máyBây giờ ; 121
hạn chế; 158 Con161
dịch vụ đăng nhập tắt máy thay đổi-
cơn giận dữ; 153
phản ứng phụ
như nguồn tuần tự hóa; 226
tự do khỏi
tầm quan trọng của nhiệm vụ độc lập-
dence; 113

Trang 81
394
Mục lục
thực hiện đồng bộ hóa bản đồ
không có sẵn từ đồng thời-
Bản đồ băm ; 86
tín hiệu
Ví dụ điều kiệnBoundedBuffer;
308
xử lý tín hiệu
như cơ chế phối hợp; 1
sự đơn giản
Xem thêm thiết kế;
Lợi thế mẫu màn hình Java; 61
của người mẫu
chủ đề có lợi cho; 3
hiệu suất so với
trong tái cấu trúc đồng bộ hóa
khối; 34
mô phỏng
sử dụng rào cản trong; 101
thông báo duy nhất
Xem thông báo ; tín hiệu ;
móc tắt máy
Xem thêm móc (s);
chiến lược đóng cửa có trật tự; 164
đơn luồng (ed)
Xem thêm chủ đề; chủ đề, giới hạn-
tinh thần;
như hạn chế Timer ; 123
như thay thế đồng bộ hóa; 42 Cung46
lợi thế tránh bế tắc; 43 fn
hệ thống con
GUI thực hiện như; 189 Điện190
thực hiện nhiệm vụ
nhược điểm của; 114
sử dụng thực thi, tiền đồng thời
cảnh giác; 172, 177 Tiếng178
Mẫu đơn
Biến ThreadLocal sử dụng với; 45
kích thước (ing)
Xem thêm cấu hình; nhạc cụ-
sự;
như mục tiêu kiểm tra hiệu suất; 260
bộ đệm giới hạn
xác định; 261
nhiệm vụ không đồng nhất; 127
hồ bơi
cốt lõi; 171 , 172 fn
tối đa; 172
bài tập
thích hợp; 113
hồ bơi chủ đề; 170 con171
ngủ
chặn các hành động phụ thuộc vào nhà nước
chặn ac- phụ thuộc vào nhà nước
tions; 295 bóng296
ổ cắm
như cơ chế phối hợp; 1
I / O đồng bộ
rea chặn không gián đoạn-
Con trai; 148
các giải pháp
Cũng thấy gián đoạn; các kết quả; Tìm kiếm;
chấm dứt;
Sắp xếp bản đồ
Đồng thờiSkipListMap là đồng tình
thuê thay thế; 85
Sắp xếp
Đồng thờiSkipListSet là đồng quy
thuê thay thế; 85
không gian
tiểu bang; 56
sự chỉ rõ
Xem thêm tài liệu;
tính chính xác được xác định trong điều khoản của; 17
kiểm tra chính tả
như nhiệm vụ GUI chạy dài; 195
chờ đợi quay vòng ; 232, 295
Xem thêm chặn / chặn; bận-
đang chờ đợi;
như mẫu lỗi đồng thời; 273
chia (ing)
mô hình dữ liệu; 201 , 201
Khóa; 235
Hiểu biết pháp luật của Amdahl; 229
như giảm độ chi tiết khóa
chiến lược; 235
Ví dụ về ServerStatus ; 236 li
quyền sở hữu; 58
ngăn xếp
Không gian địa chỉ
ràng buộc tạo chủ đề; 116 fn
giam cầm; 44 , 44 Tiếng45
Xem thêm bị giam cầm; đóng gói-
sự;
không chặn; 330
kích thước
tác động chiến lược tìm kiếm; 184
dấu vết
sử dụng bãi chứa ren; 216
dữ liệu cũ ; 35 con36
rủi ro xuất bản không đúng; 51
điều kiện chủng tộc gây ra; 20 fn

Trang 82
Mục lục
395
chết đói ; 218, 218
Xem thêm bế tắc; sống động; lòng ham muốn;
hiệu suất;
như thất bại sinh động; số 8
khóa trong rủi ro lặp lại của; 83
bế tắc chết đói; 169 ,
168 Gian169
bế tắc chết đói; 215
nhà nước ; 15
Xem thêm nguyên tử / nguyên tử; đóng gói-
lation; vòng đời; đại diện-
sự; sự an toàn; hiển thị;
ứng dụng
chủ đề khung tác động vào; 9
mã vs.
tập trung chủ đề an toàn; 17
phụ thuộc
các lớp học; 29
lớp học, xây dựng; 291 Từ318
hoạt động; 57
hoạt động, ngăn chặn chiến lược;
291
hoạt động, điều kiện xếp hàng han-
cưng chiều; 296
hoạt động, quản lý; 29
nhiệm vụ tự do từ, tầm quan trọng
của; 113
đóng gói
phá vỡ, chi phí của; 16 Lõi17
sử dụng bảo vệ bất biến; 83
vai trò đồng bộ hóa; 94
sử dụng lớp an toàn luồng; 23
vòng đời
Phương pháp ExecutorService ; 121
kiểm soát khóa của; 27 trận29
hợp lý; 58
sự quản lý
Opera đồng bộ hóa dựa trên AQS-
tions; 311
quản lý quyền truy cập vào
như mục tiêu an toàn chủ đề; 15
sửa đổi
vai trò tầm nhìn; 33
đột biến
phối hợp truy cập vào; 110
vật; 55
các thành phần của; 55
an toàn từ xa và chủ đề; 10
quyền sở hữu
vấn đề thiết kế lớp học; 57 con58
phục vụ với
vấn đề an toàn chủ đề, nguyên tử;
19 trận23
vấn đề an toàn chủ đề, sự sống
và mối quan tâm về hiệu suất;
29
vấn đề an toàn luồng, khóa;
23 trận29
không gian; 56
phi vụ
như ví dụ an toàn luồng; 18 con19
bài tập
tác động đến Future.get; 95
vấn đề trung gian, tắt máy;
158 Con161
biến đổi
trong khuôn khổ giải câu đố
thí dụ; 183
hạn chế chuyển tiếp; 56
biến
điều kiện sử dụng vị ngữ; 299
độc lập; 66 , 66
độc lập, chia tách khóa; 235
yêu cầu xuất bản an toàn;
68 con69
ví dụ nhà nướcDepereeMethod ; 301 li
tĩnh
khởi tạo
cơ chế xuất bản an toàn; 53,
347
công cụ phân tích tĩnh ; 271 Tiết273
thu thập số liệu thống kê
Xem thêm thiết bị;
thêm vào nhóm luồng; 179
ThreadPoolExecutor móc cho; 179
trạng thái
cờ
sử dụng biến dễ bay hơi với; 38
bị gián đoạn; 138
chủ đề
vấn đề tắt máy; 158
chiến lược
Xem thêm thiết kế; tài liệu;
hướng dẫn; chính sách; đại diện
oán giận;
sử dụng biến nguyên tử; 34
hủy bỏ
Sử dụng trong tương lai; 145 Tiếng147
tránh bế tắc; 208, 215 Vang217
phái đoàn
ví dụ theo dõi xe; 64
thiết kế

Trang 83
396
Mục lục
chính sách gián đoạn; 93
sử dụng tài liệu
giá trị chú thích; 6
quản lý cuối vòng đời; 135 Ung
166
Xử lý gián đoạn ngoại lệ ; 93
xử lý gián đoạn; 140, 142
Sử dụng trong tương lai ; 146
khóa tách; 235
khóa
Lợi thế đồng thờiHashMap ;
85
màn hình
ví dụ theo dõi xe; 61
song song
phân vùng; 101
cải thiện hiệu suất; 30
chương trình thiết kế chương trình
đúng thì hiệu suất; 16
Tìm kiếm
kích thước ngăn xếp tác động vào; 184
tắt
đóng gói phương pháp vòng đời;
155
ví dụ dịch vụ khai thác gỗ; 150 ngân hàng
155
thi cử một lần
ple; 156 Gian158
thuốc độc; 155
chia quyền sở hữu an toàn; 58
đoàn chủ đề an toàn; 234 con235
mở rộng lớp an toàn chủ đề; 71
các lớp stream
khóa phía khách hàng với; 150 fn
an toàn ren; 150
Chuỗi
đặc điểm bất biến; 47 fn
lột đồ
Xem thêm tranh cãi;
Khóa; 237, 237
Hiểu biết pháp luật của Amdahl; 229
Sử dụng đồng thờiHashMap; 85
cấu trúc
lớp an toàn
sử dụng thành phần đối tượng; 55 Led78
phân lớp
những vấn đề an toàn; 304
nộp , thực thi so với
xử lý ngoại lệ không bị bắt; 163
đình chỉ, chủ đề
Chi phí; 232, 320
loại bỏ bằng đồng quy dựa trên CAS
cơ chế hợp lý; 321
Thread.suspend , khấu hao rea-
con trai; 135 fn
nuốt ngắt
như thực hành chán nản; 93
hậu quả xấu của; 140
khi được phép; 143
Lung lay
Xem thêm GUI;
người nghe
ngoại lệ quy tắc đơn luồng;
192
phương pháp
ngoại lệ quy tắc đơn luồng;
191 Gian192
chủ đề
giam cầm; 42
giam cầm trong; 191 Gian192
sử dụng; 9
sử dụng, mối quan tâm an toàn và; 10 trận11
mã không bảo vệ mecha-
nism trong; 162
Tay quay
hỗ trợ tác vụ GUI chạy dài; 198
đồng bộ hóa / đồng bộ hóa ; 15
Xem thêm truy cập; đồng thời / đồng tình-
sự đúng mực; khóa (ing); sự an toàn;;
lợi thế phân bổ so với.; 242
thực hành xấu
kiểm tra khóa kép; 349 Tiếng349
khối; 25
Các đối tượng Java như; 25
vấn đề thực hiện bộ đệm; 103
bộ sưu tập; 79 Gian84
bộ sưu tập đồng thời so với.; 84
có vấn đề với; 79 Gian82
khối xây dựng đồng thời; 79 Gian110
tranh cãi; 230
chương trình đồng bộ chính xác; 341
yêu cầu chia sẻ dữ liệu cho; 33 Gian39
đóng gói
quản lý vòng lặp ẩn
xuyên qua; 83
yêu cầu cho chủ đề an toàn
các lớp học; 18
'con đường nhanh'
Hoạt động dựa trên CAS so với.; 324
Chi phí; 230

Trang 84
Mục lục
397
đối tượng bất biến như thay thế;
52
không nhất quán
như mẫu lỗi đồng thời; 271
ký ức
tác động hiệu quả của; 230 con231
sử dụng khả năng hiển thị bộ nhớ của; 33 Gian39
vai trò đặt hàng hoạt động; 35
cõng; 3433344
chính sách; 55
yêu cầu tài liệu;
74 Cung77
đóng gói, khóa phía khách hàng-
vi phạm ing; 71
phòng chống tình trạng chủng tộc với; 7
yêu cầu, tác động đến lớp học
sự mở rộng; 71
yêu cầu, tác động đến lớp học
sửa đổi; 71
chia sẻ yêu cầu nhà nước cho; 28
Khả năng ReentrantLock ; 277
yêu cầu
chính sách đồng bộ hóa
nent; 56 bóng57
chủ đề an toàn cần thiết cho; 5
các loại
Xem rào cản; chặn, xếp hàng;
Tương lai; chốt;
ngữ nghĩa;
không tự chủ; 230
biến số biến động so với.; 38
vỏ bánh
hỗ trợ khóa phía khách hàng; 73
syncList ( Bộ sưu tập )
sử dụng ấn phẩm an toàn; 52
đồng bộ hóa (s) ; 94 , 94
Xem thêm Semaphore ; CyclicBarrier ;
Tương lai ; Trao đổi ;
CountDownLatch ;
hành vi và giao diện; 308 Tua311
xây dựng
với AQS; 311
với hàng đợi điều kiện; 291 Từ318
I / O đồng bộ
chặn không gián đoạn; 148
Đồng bộ hóa giá trị ; 89
lợi thế về hiệu suất; 174 fn
sử dụng hồ bơi của; 173, 174
T
nhiệm vụ ; 113
Xem thêm các hoạt động; sự kiện); vòng đời;
không đồng bộ
Xử lý FutureTask ; 95 Cung98
ranh giới; 113
phân tích song song; 123 ăn133
sử dụng ThreadLocal trong; 168
hủy bỏ; 135 Cổng150
chính sách; 136
chủ đề gián đoạn chính sách
tionship đến; 141
hoàn thành
như lý do hủy bỏ; 136
quan hệ phương sai thời gian dịch vụ-
tàu; 264 khó266
phụ thuộc
hàm ý chính sách thực thi;
167
rủi ro chết đói chủ đề;
168
chấp hành; 113 ăn134
trong chủ đề; 113 C115115
chính sách; 118 ăn119
chính sách và, khớp nối ngầm
giữa; 16710170
chính sách, ứng dụng
tầm quan trọng của pháp sư; 113
tuần tự; 114
tạo chủ đề rõ ràng cho; 115
GUI
nhiệm vụ dài hạn; 195 195198
nhiệm vụ ngắn hạn; 192 192
nhiệm vụ không đồng nhất
hạn chế song song hóa; 127
129
nhiệm vụ đồng nhất
lợi thế song song; 129
vòng đời
Giai đoạn thực hiện ; 125
Phương pháp ExecutorService ; 121
đại diện cho Tương lai ; 125
chạy dài
vấn đề đáp ứng; 170
song song hóa
đồng nhất so với dị thể-
neous; 129
xử lý sau chấm dứt; 121
hàng đợi
quản lý, chủ đề nhóm con-
vấn đề hình; 172 Con174

Trang 85
398
Mục lục
sử dụng hồ bơi của; 172 Con174
đại diện
Runnable sử dụng cho; 125
với Tương lai ; 126
độ nhạy thời gian đáp ứng
chính sách thực hiện; 168
lập kế hoạch
chính sách mỗi nhiệm vụ; 115
nguồn tuần tự
xác định; 225
tiểu bang
ảnh hưởng đến Future.get ; 95
vấn đề trung gian, tắt máy;
158 Con161
chủ đề so với
xử lý gián đoạn; 141
hẹn giờ
xử lý; 123
hai bên
Quản lý trao đổi của; 101
TCK (Bộ tương thích công nghệ)
yêu cầu kiểm tra đồng thời;
250
phá bỏ
chủ đề; 171 Gian172
kỹ thuật
Xem thêm thiết kế; hướng dẫn; chiến lược-
gies;
đối tượng tạm thời
và các biến ThreadLocal ; 45
chấm dứt
Nhà nước thực thi dịch vụ ; 121
chấm dứt
Xem thêm hủy bỏ; gián đoạn;
vòng đời;
khung giải câu đố; 187
kiểm tra an toàn
tiêu chuẩn cho; 254, 257
chủ đề
bất thường, xử lý; 161 bóng163
giữ thời gian sống tác động vào; 172
lý do khấu hao; 135 fn
khóa thời gian sử dụng; 279
phương pháp ví dụ kiểm tra ; 262 li
thử nghiệm
Xem thêm thiết bị; khai thác gỗ;
đo đạc; giám sát;
đảm bảo chất lượng; số liệu thống kê;
chương trình đồng thời; 247 Mây274
rủi ro bế tắc; 210 fn
chức năng
so với kiểm tra hiệu suất; 260
sự sống
tiêu chí; 248
hiệu suất; 260 con266
tiêu chí; 248
bàn thắng; 260
cạm bẫy
tránh né; 266 Cung270
loại bỏ mã chết; 269
biên dịch động; 267 Tua268
thu gom rác thải; 266
định lượng tiến độ; 248
chứng minh một tiêu cực; 248
thời gian và đồng bộ hóa
sự thật; 247
lấy mẫu đường dẫn mã không thực tế;
268
tranh chấp phi thực tế; 268 con269
chương trình đúng; 248 con260
sự an toàn; 252 cạn257
tiêu chí; 247
chiến lược; 270 Gian274
testPool Ví dụ mẫu ; 258 li
ví dụ testTakeBlocksWhenEmpty ;
252 li
tài liệu tham khảo này
rủi ro xuất bản; 41
Chủ đề
tham gia
thời gian, vấn đề với; 145
getState
sử dụng biện pháp phòng ngừa; 251
phương pháp gián đoạn; 138, 139 li
phòng ngừa sử dụng; 140
an toàn ren ; 18 , 15
và dữ liệu đột biến; 35
và móc tắt máy; 164
đă ̣c điểm của; 17 trận19
mô hình dữ liệu, ứng dụng GUI han-
cưng chiều; 201
phái đoàn; 62
đoàn của; 234
trong khuôn khổ giải câu đố; 183
Các vấn đề, tính nguyên tử; 19 trận23
các vấn đề, sự sống và hiệu suất;
29
cơ chế, khóa; 23 trận29
rủi ro; 5 trận8
chủ đề ; 2
Xem thêm đồng thời / đồng thời;
sự an toàn; đồng bộ hóa;

Trang 86
Mục lục
399
chấm dứt bất thường của; 161 bóng163
như bối cảnh giam cầm; 59
lợi ích của; 3 trận5
chặn; 92
giam cầm; 42 , 42
Xem thêm bị giam cầm; đóng gói-
sự;
đặc biệt; 43
và chính sách thực thi; 167
trong khung GUI; 190
trong đu quay; 191 Gian192
vai trò, chính sách đồng bộ hóa
sự chỉ rõ; 56
cây rơm; 44 , 44 Tiếng45
Tiêu đề ; 45 con46
Giá cả
bối cảnh mất địa phương; số 8
chuyển ngữ cảnh; số 8
chi phí; 229
sự sáng tạo; 171 Gian172
sáng tạo rõ ràng cho các nhiệm vụ; 115
không ràng buộc, bất lợi; 116
daemon; 165
bãi rác; 216
phân tích bế tắc sử dụng; 216 Tua217
lợi thế khóa nội tại hơn
ReentrantLock ; 285
khóa phân tích tranh chấp sử dụng; 240
nhà máy; 175 , 175 Quảng177
sự thất bại
xử lý ngoại lệ không bị bắt;
162 bóng163
buộc chấm dứt
lý do khấu hao; 135 fn
xen kẽ
nguy hiểm của; 5 trận8
gián đoạn; 138
vấn đề tắt máy; 158
cờ trạng thái; 138
rò rỉ; 161
thử nghiệm cho; 257
Vấn đề hẹn giờ với; 123
UncaughtExceptionHandler
phòng ngừa; 162 bóng163
vòng đời
tác động hiệu suất; 116
quản lý dịch vụ dựa trên luồng
tinh thần; 150
trên không
trong thử nghiệm an toàn, chiến lược cho
giảm nhẹ; 254
quyền sở hữu; 150
bể bơi; 119 -121
thêm số liệu thống kê vào; 179
và hàng đợi làm việc; 119
ứng dụng; 167
như thiết kế sản xuất-tiêu dùng; 88
như quản lý tài nguyên luồng
cơ chế; 117
sử dụng gọi lại trong thử nghiệm; 258
sáng tạo; 120
rủi ro bế tắc; 215
phương pháp nhà máy cho; 171
cấu hình sau thi công;
177 Con179
kích thước; 170 con171
cấu hình hàng đợi nhiệm vụ; 172
174
ưu tiên
thao túng, rủi ro sinh động; 218
sự ưu tiên
khi nào sử dụng; 219
quy trình so với.; 2
xếp hàng
Quản lý đồng bộ
của; 89
rủi ro của; 5 trận8
giam cầm chủ đề nối tiếp; 90 , 90 bóng92
dịch vụ sở hữu
dừng lại; 150 trận161
chia sẻ
sự cần thiết và nguy hiểm trong GUI
các ứng dụng; 189 Điện190
Độc thân
thực hiện nhiệm vụ tuần tự; 114
nguồn; 9 trận11
bế tắc chết đói; 169 , 168 Nền169
Huyền phù
Chi phí; 232, 320
Thread.suspend , phản đối
lý do; 135 fn
bài tập
thực hiện trong; 113 C115115
lập kế hoạch, chủ đề cho mỗi nhiệm vụ
băng giá; 115
lập kế hoạch, chủ đề cho mỗi nhiệm vụ
nhược điểm băng giá; 116
so với xử lý gián đoạn; 141
phá bỏ; 171 Gian172
chấm dứt
giữ thời gian sống tác động vào; 172
bế tắc chết đói; 215

Trang 87
400
Mục lục
chủ đề cục bộ
Xem thêm chồng, giam cầm;
tính toán
vai trò trong hiệu suất chính xác
thử nghiệm; 268
Chủ đề
lý do khấu hao; 135 fn
Chủ đề
lý do khấu hao; 135 fn
ThreadFactory ; 176 li
tùy chỉnh nhóm chủ đề với; 175
ThreadInfo
và thử nghiệm; 273
Tiêu đề ; 45 con46
và chính sách thực thi; 168
cho sự giam cầm của chủ đề; 43
rủi ro của; 46
ThreadPoolExecutor
và mã không tin cậy; 162
cấu hình của; 171 Từ179
constructor; 172 li
móc mở rộng; 179
newTaskFor ; 126 li , 148
@ThreadSafe ; 7, 353
tiết lưu
như quản lý quá tải mecha-
chủ nghĩa hư vô; 88, 173
sử dụng chính sách bão hòa; 174
Sử dụng semaphore trong BoundedExecutor
thí dụ; 176 li
thông lượng
Xem thêm hiệu suất;
như tiêu chí kiểm tra hiệu suất; 248
khóa so với các biến nguyên tử; 328
bàn giao nhà sản xuất
thử nghiệm; 261
thực hiện hàng đợi
sự khác biệt nối tiếp; 227
ứng dụng máy chủ
tầm quan trọng của; 113
ứng dụng máy chủ
thực hiện nhiệm vụ đơn luồng
nhược điểm; 114
mối nguy hiểm an toàn chủ đề cho; số 8
chủ đề có lợi cho; 3
Có thể ném
Xử lý FutureTask ; 98
thời gian / thời gian
Xem thêm bế tắc; vòng đời; hoặc là-
der / đặt hàng; cuộc đua
tions;
nhiệm vụ dựa trên
sự điều khiển; 123
vấn đề thiết kế quản lý; 131
133
xử lý rào cản dựa trên; 99
những hạn chế
như lý do hủy bỏ; 136
trong khuôn khổ giải câu đố;
187
xử lý gián đoạn; 144 con145
thời hạn chờ đợi
như tính năng của Điều kiện ; 307
tính toán hoãn lại
vấn đề thiết kế; 125
biên dịch động
như cạm bẫy thử nghiệm hiệu suất;
267
độ chi tiết
tác động đo lường; 264
cố sống đi
tác động chấm dứt chủ đề; 172
Ví dụ LeftRightDeadlock ; 207 fg
mua lại khóa; 279
phạm vi khóa
thu hẹp, như sự tranh chấp khóa
chiến lược cắt giảm; 233 con235
nhiệm vụ GUI chạy dài; 195 195198
nhiệm vụ dài hạn
vấn đề đáp ứng han-
cưng chiều; 170
đo lường
trong thử nghiệm hiệu suất; 260
ThreadPoolExecutor móc cho;
179
thay đổi dựa trên hiệu suất trong
rủi ro an toàn chủ đề; 7
nhiệm vụ định kỳ
xử lý; 123
chỉ dẫn tiến độ
cho các tác vụ GUI chạy dài; 198
tương đối so với tuyệt đối
lựa chọn lớp học dựa trên; 123 fn
phản ứng
nhiệm vụ nhạy cảm với, thực thi
ý nghĩa chính sách; 168
các tác vụ GUI chạy ngắn; 192 192
thời gian chờ xử lý
tác động tham số kích thước lõi hồ bơi
trên; 172 fn
khóa thời gian; 215 Tua216

Trang 88
Mục lục
401
lặp đi lặp lại yếu nhất quán seman-
kiến thức; 86
Hết thời gian
trong các nhiệm vụ đúng thời gian; 131
tiêu chí hủy bỏ nhiệm vụ; 147
Hẹn giờ
vấn đề xử lý công việc; 123
sử dụng chủ đề; 9
hệ thống chia sẻ thời gian
như cơ chế đồng thời; 2
công cụ
Xem thêm thiết bị; đo lường-
tinh thần;
sử dụng chú thích; 353
kiểm toán mã
lỗi khóa được phát hiện bởi; 28 fn
kiểm tra đống; 257
đo đạc
Sử dụng I / O; 240
tầm quan trọng cho hiệu quả
tối ưu hóa mance; 224
hiệu suất; 230
giám sát
đảm bảo chất lượng sử dụng; 273
hồ sơ
khóa phát hiện tranh chấp; 240
đo lường hiệu suất; 225
đảm bảo chất lượng sử dụng; 273
phân tích tĩnh; 271 Tiết273
giao dịch
Xem thêm các sự kiện;
nguyên tử đồng thời tương tự; 25
biến đổi
tiểu bang
trong khuôn khổ giải câu đố
thí dụ; 183
quá độ
Xem thêm nhà nước;
hạn chế chuyển đổi nhà nước; 56
tác động đến biến trạng thái an toàn
sự xuất bản; 69
ví dụ cổng đặt phòng du lịch
như ví dụ nhiệm vụ thời gian; 131 Cung 133
cây)
Xem thêm các bộ sưu tập;
mô hình
Xử lý ứng dụng GUI; 200
đi qua
song song hóa; 181 Hậu182
Bản đồ cây
Đồng thờiSkipListMap là đồng tình
thuê thay thế; 85
Cây cối
Đồng thờiSkipListSet là đồng quy
thuê thay thế; 85
Thuật toán ngăn xếp không chặn của Treiber ;
331 li
kích hoạt (ing)
Cũng thấy gián đoạn;
JVM đột ngột tắt máy; 164
bãi thải sợi; 216
khối thử
Xem thêm trường hợp ngoại lệ;
như bảo vệ chống lại mã không tin cậy
hành vi; 161
thử-cuối cùng chặn
Xem thêm trường hợp ngoại lệ;
và ngoại lệ chưa bị bắt; 163
như bảo vệ chống lại mã không tin cậy
hành vi; 161
thử
sử dụng xà lan; 283 fn
tránh bế tắc; 280 li
ví dụ trySendOnSharedLine ; 281 li
điều chỉnh
Xem thêm tối ưu hóa;
hồ bơi chủ đề; 171 Từ179
Bạn
không giới hạn
Xem cũng bị ràng buộc; ràng buộc;
hàng đợi;
chặn chờ
thời gian so với, trong nhiệm vụ dài hạn
sự quản lý; 170
hàng đợi
đặc tính không chặn; 87
sử dụng thuốc độc tắt máy; 155
sử dụng hồ bơi của; 173
tạo chủ đề
nhược điểm của; 116
xử lý ngoại lệ chưa bị bắt ; 162 bóng163
Xem thêm trường hợp ngoại lệ;
UncaughtExceptionHandler ; 163 li
sử dụng lớp chủ đề tùy chỉnh; 175
phát hiện rò rỉ ren; 162 bóng163
ngoại lệ không được kiểm tra
Xem thêm trường hợp ngoại lệ;
bắt
nhược điểm của; 161

Trang 89
402
Mục lục
không được bảo vệ
đồng bộ hóa; 230
kiểm tra đơn vị
cho BoundedBuffer dụ; 250
các vấn đề; 248
hành vi mã không tin cậy
Xem thêm an toàn;
Mã bảo vệ ExecutorService
chiến lược; 179
cơ chế bảo vệ; 161
đang cập nhật
Xem thêm vòng đời;
trường nguyên tử; 335 Điện336
đối tượng bất biến; 47
lượt xem
trong các nhiệm vụ GUI; 201
nâng cấp
khóa đọc-ghi; 287
kịch bản sử dụng
kiểm tra hiệu suất sử dụng; 260
người sử dụng
Xem thêm GUI;
yêu cầu hủy
như lý do hủy bỏ; 136
Phản hồi
trong các tác vụ GUI chạy dài; 196 li
giao diện
chủ đề lợi ích cho; 5
sử dụng ; 225
Xem thêm hiệu suất; tài nguyên);
CPU
Luật của Amdahl; 225, 226 fg
tối ưu hóa, như đa luồng
mục tiêu; 222
hạn chế thực hiện tuần tự;
124
phần cứng
chiến lược cải tiến; 222
V
giá trị
Xem kết quả;
biến
Xem thêm đóng gói; tiểu bang;
nguyên tử
các lớp học; 324 322329
khóa so với.; 326 322329
thuật toán không chặn và;
319
biến số biến động so với.; 39, 325
điều kiện
rõ ràng; 306
cẩu
như cạm bẫy tối ưu hóa JVM; 38 fn
địa phương
sử dụng ngăn xếp ngăn xếp; 44
yêu cầu bất biến đa biến
cho nguyên tử; 57
tiểu bang
điều kiện sử dụng vị ngữ; 299
độc lập; 66 , 66
sử dụng độc lập, chia tách khóa
với; 235
dữ liệu đối tượng được lưu trữ trong; 15
yêu cầu xuất bản an toàn;
68 con69
Tiêu đề ; 45 con46
bay hơi; 38 , 37 Tiếng39
sử dụng lớp biến nguyên tử; 319
biến nguyên tử so với.; 39, 325
bất biến đa biến cấm-
ited từ; 68
phương sai
thời gian phục vụ; 264
Vectơ
như sử dụng ấn phẩm an toàn; 52
như bộ sưu tập đồng bộ; 79
hoạt động kiểm tra sau đó hành động; 80 li , 79 Vang
80
quản lý khóa phía khách hàng của
hành động ghép; 81 li
ví dụ theo dõi xe
chiến lược đoàn; 64
giám sát chiến lược; 61
chiến lược xuất bản biến nhà nước;
69 con71
thành phần đối tượng an toàn chủ đề de-
ký tên; 61 Gian71
mô hình dữ liệu phiên bản ; 201
lượt xem
Xử lý sự kiện
đối tượng xem mô hình; 195 fg
mô hình-khung nhìn-trình điều khiển
rủi ro bế tắc; 190
ví dụ theo dõi xe; 61
dựa trên phản ánh
bởi cập nhật trường nguyên tử; 335
kịp thời so với tính nhất quán; 66, 70
đang cập nhật
trong nhiệm vụ GUI chạy dài han-
cưng chiều; 201
với các mô hình dữ liệu phân chia; 201

Trang 90
Mục lục
403
hiển thị
Xem thêm đóng gói; sự an toàn; phạm vi;
điều kiện xếp hàng
kiểm soát, điều kiện rõ ràng và
Khóa sử dụng; 306
đảm bảo
Đặc điểm kỹ thuật JMM của; 339
quản lý khóa của; 36 Cung37
ký ức; 33 Gian39
Khả năng ReentrantLock; 277
vai trò đồng bộ hóa; 33
sử dụng tài liệu tham khảo dễ bay hơi; 49
ứng dụng vmstat
Xem thêm đo lường; công cụ;
Đo lường sử dụng CPU; 240
đo lường hiệu suất; 230
đo lường sử dụng ren; 241
Vô hiệu
nhiệm vụ không trả về giá trị sử dụng; 125
bay hơi
hủy bỏ sử dụng cờ; 136
trận chung kết vs.; 158 fn
xuất bản các đối tượng bất biến với;
48 Cung49
sử dụng ấn phẩm an toàn; 52
biến; 38 , 37 Tiếng39
sử dụng lớp biến nguyên tử; 319
biến nguyên tử so với.; 39, 325
nhược điểm nguyên tử; 320
bất biến đa biến cấm-
ited từ; 68
sử dụng chủ đề giam cầm với; 43
W
chờ đợi
chặn
hẹn giờ so với không giới hạn; 170
bận rộn chờ đợi; 295
điều kiện
và vị ngữ điều kiện; 299
hình thức kinh điển; 301 li
lỗi, như lỗi đồng thời pat-
chim nhạn; 272
gián đoạn, như tính năng của Con-
dition ; 307
không bị gián đoạn, như tính năng của
Điều kiện ; 307
thức dậy từ, điều kiện
xử lý hàng đợi; 300
bộ; 297
nhiều, như tính năng của Condi-
tion ; 307
chờ đợi quay vòng; 232
như mẫu lỗi đồng thời; 273
chờ chạy
Nhà nước FutureTask ; 95
thức dậy
Xem thêm chặn / chặn; điều kiện,
xếp hàng; thông báo ; ngủ; chờ đợi;
xử lý hàng đợi điều kiện; 300
lặp lặp nhất quán yếu ; 85
Xem thêm các vòng lặp / lặp;
ví dụ trình thu thập dữ liệu web ; 15916161
sử dụng trong luồng
Xem ngăn xếp, giam cầm;
ngữ nghĩa bên trong-luồng-như-nếu-nối tiếp ;
337
công việc
hàng đợi
và nhóm luồng, như nhà sản xuất-
thiết kế tiêu dùng; 88
trong Executor sử dụng khuôn khổ; 119
tương tác nhóm chủ đề, kích thước tun-
yêu cầu ing; 173
chia sẻ
deques lợi thế cho; 92
ăn cắp thuật toán lập lịch; 92
deques và; 92
nhiệm vụ như đại diện của; 113
giấy gói)
nhà máy
Mẫu trang trí; 60
các lớp bao bọc đồng bộ
như bộ sưu tập đồng bộ
các lớp học; 79
hỗ trợ khóa phía khách hàng; 73

You might also like