sách gpt4 ai đã đi

Hướng dẫn học từ khóa đồng bộ Java (Toàn diện & Chi tiết)

In lại Tác giả:qq735679552 Thời gian cập nhật: 2022-09-29 22:32:09 31 4
mua khóa gpt4 Nike

CFSDN nhấn mạnh vào việc tạo ra giá trị thông qua mã nguồn mở. Chúng tôi cam kết xây dựng một nền tảng chia sẻ tài nguyên để mọi người làm CNTT có thể tìm thấy thế giới tuyệt vời của riêng mình tại đây.

Bài đăng trên blog CFSDN này Java Synchronized Keyword Study Guide (Comprehensive & Detailed) được tác giả thu thập và biên soạn. Nếu bạn quan tâm đến bài viết này, vui lòng thích nó.

Lời nói đầu

Trong Java, có một từ khóa thường bị bỏ qua nhưng rất quan trọng được gọi là Synchronized. Hôm nay, tôi sẽ giải thích chi tiết tất cả các kiến ​​thức về từ khóa Synchronized trong Java. Tôi hy vọng bạn sẽ thích nó.

Mục lục

Hướng dẫn học từ khóa đồng bộ Java (Toàn diện & Chi tiết)

1. Định nghĩa

1 từ khóa trong Java.

2. Chức năng

Đảm bảo rằng chỉ có tối đa một luồng thực thi phương thức/mã được Synchronized sửa đổi cùng một lúc.

Các luồng khác phải đợi luồng hiện tại hoàn tất việc thực thi khối phương thức/mã trước khi chúng có thể thực thi khối phương thức/mã.

3. Các tình huống ứng dụng

Đảm bảo an toàn luồng và giải quyết vấn đề đồng bộ hóa đồng thời trong đa luồng (chặn đồng thời được triển khai). Các tình huống cụ thể như sau:

Khi sửa đổi một phương thức/khối mã thể hiện, (đồng bộ hóa) sẽ bảo vệ lệnh gọi của cùng một phương thức đối tượng & Khi đối tượng thể hiện hiện tại sửa đổi một phương thức/khối mã tĩnh, (đồng bộ hóa) sẽ bảo vệ lệnh gọi của phương thức tĩnh & đối tượng lớp.

4. Nguyên tắc

Đồng bộ hóa cơ bản được JVM triển khai thông qua đối tượng giám sát. Các phương thức như wait() và notify() cũng dựa vào đối tượng giám sát.

Bản chất của khóa màn hình phụ thuộc vào việc triển khai khóa mutex của hệ điều hành cơ bản.

5. Sử dụng cụ thể

Synchronized được sử dụng để sửa đổi các khối mã, phương thức thể hiện của lớp và phương thức tĩnh.

5.1 Quy định sử dụng

Hướng dẫn học từ khóa đồng bộ Java (Toàn diện & Chi tiết)

5.2 Các loại và cấp độ khóa Vì Synchronized sửa đổi các khối mã, phương thức thể hiện và phương thức tĩnh của lớp nên các loại khóa khác nhau được chia thành các loại sau.

Hướng dẫn học từ khóa đồng bộ Java (Toàn diện & Chi tiết)

Sự khác biệt giữa.

Hướng dẫn học từ khóa đồng bộ Java (Toàn diện & Chi tiết)

5.3 Cách sử dụng.

  1. /**
  2. * Khóa đối tượng
  3. */
  4. công cộng lớp học Bài kiểm tra{
  5. // Khóa đối tượng: Form 1 (khóa phương thức)
  6. công cộng đồng bộ vô hiệu Phương pháp 1(){
  7. Hệ thống.ngoài.inl("Tôi là một khóa đối tượng và một khóa phương thức");
  8. thử{
  9. Chủ đề.ngủ(500);
  10. } nắm lấy (Ngoại lệ bị ngắt){
  11. .inStackTrace();
  12. }
  13.  
  14. }
  15.  
  16. // Khóa đối tượng: Biểu mẫu 2 (biểu mẫu khối mã)
  17. công cộng vô hiệu Phương pháp 2(){
  18. đồng bộ (cái này){
  19. Hệ thống.ngoài.inl("Tôi là khóa đối tượng");
  20. thử{
  21. Chủ đề.ngủ(500);
  22. } nắm lấy (Ngoại lệ bị ngắt){
  23. .inStackTrace();
  24. }
  25. }
  26.  
  27. }
  28. }
  29.  
  30. /**
  31. * Khóa phương thức (tức là biểu mẫu 1 trong khóa đối tượng)
  32. */
  33. công cộng đồng bộ vô hiệu Phương pháp 1(){
  34. Hệ thống.ngoài.inl("Tôi là một khóa đối tượng và một khóa phương thức");
  35. thử{
  36. Chủ đề.ngủ(500);
  37. } nắm lấy (Ngoại lệ bị ngắt){
  38. .inStackTrace();
  39. }
  40.  
  41. }
  42.  
  43. /**
  44. * Khóa lớp
  45. */
  46. công cộng lớp học Bài kiểm tra{
  47.    // Khóa lớp: Form 1: Khóa phương thức tĩnh
  48. công cộng tĩnh đồng bộ vô hiệu Phương pháp 1(){
  49. Hệ thống.ngoài.inl("Tôi là Khóa Lớp Số Một");
  50. thử{
  51. Chủ đề.ngủ(500);
  52. } nắm lấy (Ngoại lệ bị ngắt){
  53. .inStackTrace();
  54. }
  55.  
  56. }
  57.  
  58. // Khóa lớp: Biểu mẫu 2: Khóa khối mã tĩnh
  59. công cộng vô hiệu Phương pháp 2(){
  60. đồng bộ (Bài kiểm tra.lớp học){
  61. Hệ thống.ngoài.inl("Tôi là Khóa số Hai của Lớp");
  62. thử{
  63. Chủ đề.ngủ(500);
  64. } nắm lấy (Ngoại lệ bị ngắt){
  65. .inStackTrace();
  66. }
  67.  
  68. }
  69.  
  70. }
  71. }

5.4 Chú ý đặc biệt.

Có một lỗi khi sửa đổi phương thức với Synchronized: nếu sửa đổi một phương thức lớn, hiệu quả sẽ bị ảnh hưởng rất lớn.

Ví dụ.

Nếu bạn sử dụng từ khóa Synchronized để sửa đổi run() của một lớp luồng, vì run() luôn chạy trong toàn bộ vòng đời của luồng, nên lệnh gọi tới bất kỳ phương thức Synchronized nào của lớp này sẽ không bao giờ thành công.

Giải pháp.

Sử dụng từ khóa Synchronized để khai báo khối mã.

Giải pháp này rất linh hoạt: nó có thể nhắm tới bất kỳ khối mã nào và bất kỳ đối tượng bị khóa nào được chỉ định.

  1. Mã như sau
  2. đồng bộ(đồng bộĐối tượng) {
  3. // Truy cập hoặc sửa đổi trạng thái chia sẻ được bảo vệ bởi khóa
  4. // Phương thức trên phải lấy được khóa của đối tượng syncObject (lớp thể hiện hoặc lớp)
  5. }

6. Tính năng

Hướng dẫn học từ khóa đồng bộ Java (Toàn diện & Chi tiết)

Lưu ý: Định nghĩa về tính nguyên tử, khả năng hiển thị và tính trật tự.

Hướng dẫn học từ khóa đồng bộ Java (Toàn diện & Chi tiết)

7. Những cách khác để kiểm soát đồng thời/đồng bộ hóa luồng

7.1 Giới thiệu về Lock và ReentrantLock.

Hướng dẫn học từ khóa đồng bộ Java (Toàn diện & Chi tiết)

sự khác biệt.

Hướng dẫn học từ khóa đồng bộ Java (Toàn diện & Chi tiết)

7.2 Tiêu chuẩn

7.2.1 Định nghĩa.

Compare And Swap, tức là so sánh và hoán đổi, là một khóa lạc quan giải quyết các hoạt động đồng thời.

Khối mã bị khóa bởi synchronized chỉ có thể được truy cập bởi một luồng tại một thời điểm, đây là khóa bi quan.

7.2.2 Nguyên tắc.

  1. //Tham số hoạt động CAS
  2. Vị trí bộ nhớ (MỘT)
  3. Giá trị ban đầu mong đợi (B)
  4. Giá trị mới mong đợi (C)
  5.  
  6. // Nguyên lý sử dụng CAS để giải quyết vấn đề đồng thời:
  7. // 1. Đầu tiên hãy so sánh A và B. Nếu chúng bằng nhau, cập nhật giá trị trong A thành C và trả về True; nếu chúng không bằng nhau, trả về false;
  8. // 2. Triển khai đồng thời bằng cách liên tục cố gắng cập nhật thông qua một vòng lặp vô hạn
  9.  
  10. // Mã giả như sau
  11. công cộng Boolean so sánh và trao đổi(dài ký ức, số nguyên cũB, số nguyên mớiC){
  12. nếu như(ký ức.lấy() == cũB){
  13. ký ức.bộ(mớiC);
  14. trở lại ĐÚNG VẬY;
  15. }
  16. trở lại SAI;
  17. }

7.2.3 Ưu điểm.

Tiêu thụ ít tài nguyên hơn: So với đồng bộ hóa, nó tiết kiệm chi phí tạm dừng và tiếp tục luồng.

Tuy nhiên, nếu quá trình cập nhật bị trì hoãn, vòng lặp vô hạn cũng gây lãng phí tài nguyên CPU.

7.2.4 Phương pháp triển khai cụ thể Sử dụng CAS có thao tác "kiểm tra trước khi thực thi", đây là thao tác không an toàn điển hình trong Java, do đó CAS thực sự được C++ triển khai thông qua việc gọi các lệnh CPU.

  1. // 1. CAS được triển khai trong Java dưới dạng lớp Unsafe
  2. // 2. Lớp Unsafe sẽ trực tiếp lấy địa chỉ bộ nhớ của thuộc tính thông qua C++
  3. // 3. Tiếp theo, CAS được triển khai bằng chuỗi phương pháp Atomic::cmpxchg của C++

7.2.5 Ứng dụng điển hình: AtomicInteger.

Đối với i++ và i–, compareAndSet & được triển khai trong một vòng lặp vô hạn.

Và bên trong hàm compareAndSet = lệnh CAS được vận hành thông qua jni. Cho đến khi hoạt động CAS thoát khỏi vòng lặp thành công.

  1. riêng tư bay hơi số nguyên giá trị;
  2. /**
  3. * Lấy giá trị hiện tại.
  4. *
  5. * @trả về giá trị hiện tại
  6. */
  7. công cộng cuối cùng số nguyên lấy() {
  8. trở lại giá trị;
  9. }
  10. /**
  11. * Tăng nguyên tử một giá trị hiện tại.
  12. *
  13. * @trả về giá trị trước đó
  14. */
  15. công cộng cuối cùng số nguyên lấyVàTăng() {
  16. (;;) {
  17. số nguyên hiện hành = lấy();
  18. số nguyên Kế tiếp = hiện hành + 1;
  19. nếu như (so sánh và thiết lập(hiện hành, Kế tiếp))
  20. trở lại hiện hành;
  21. }
  22. }
  23.  
  24. /**
  25. * Giảm nguyên tử một giá trị hiện tại.
  26. *
  27. * @trả về giá trị trước đó
  28. */
  29. công cộng cuối cùng số nguyên lấy và giảm() {
  30. (;;) {
  31. số nguyên hiện hành = lấy();
  32. số nguyên Kế tiếp = hiện hành - 1;
  33. nếu như (so sánh và thiết lập(hiện hành, Kế tiếp))
  34. trở lại hiện hành;
  35. }
  36. }

8. Kết luận

Bài viết này chủ yếu giải thích từ khóa Synchronized trong Java, từ khóa thường bị bỏ qua nhưng rất quan trọng.

Đây là phần cuối của bài viết này về hướng dẫn học từ khóa Đồng bộ Java. Để biết thêm nội dung liên quan đến từ khóa Đồng bộ Java, vui lòng tìm kiếm các bài viết trước của tôi hoặc tiếp tục duyệt các bài viết liên quan bên dưới. Tôi hy vọng bạn sẽ ủng hộ tôi trong tương lai! .

Liên kết gốc: https://blog.csdn.net/carson_ho/article/details/82992269.

Cuối cùng, bài viết này về Java's Synchronized Keyword Study Guide (Comprehensive & Detailed) đã có ở đây. Nếu bạn muốn biết thêm về Java's Synchronized Keyword Study Guide (Comprehensive & Detailed), vui lòng tìm kiếm các bài viết CFSDN hoặc tiếp tục duyệt các bài viết liên quan. Tôi hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai! .

31 4 0
qq735679552
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com