JavaRush /Blog Java /Random-VI /10 tính năng của Java 8 bạn chưa từng nghe đến
Vash_the_Stampede
Mức độ

10 tính năng của Java 8 bạn chưa từng nghe đến

Xuất bản trong nhóm
Lambda, lambda, lambda. Đó là tất cả những gì bạn nghe được khi mọi người nói về Java 8. Nhưng đó chỉ là một phần. Java 8 có rất nhiều tính năng mới - một số lớp và thành ngữ mới mạnh mẽ, và những tính năng khác chỉ là những thứ lẽ ra phải có ngay từ đầu. Tôi muốn chuyển sang mười tính năng mới mà tôi coi như những viên ngọc quý nhỏ chắc chắn đáng để biết. Chắc chắn có ít nhất một hoặc hai trong số đó mà bạn muốn thử, vì vậy hãy bắt đầu! 1) Phương pháp mặc định. Tính năng mới trong ngôn ngữ Java, giờ đây bạn có thể thêm nội dung phương thức vào giao diện ( phương thức mặc định ). Các phương thức này được thêm vô điều kiện vào tất cả các lớp thực hiện các giao diện này. Điều này mang đến cho bạn cơ hội thêm chức năng mới vào các thư viện hiện có mà không vi phạm mã cũ. Đó chắc chắn là một điểm cộng. Mặt khác, nó làm mờ đi nghiêm trọng ranh giới giữa giao diện, vốn bắt buộc phải tuân theo một số điều kiện nhất định như một quy ước và lớp tuân theo chúng, với tư cách là triển khai riêng tư của nó. Ở bên tay phải (phải), đây có thể là một cách hay để làm cho giao diện thông minh hơn, tránh lặp lại và mở rộng thư viện. Trong tay kẻ xấu; chúng ta sẽ sớm thấy các phương thức trong giao diện gọi cái này và chuyển nó thành một kiểu cụ thể. Brrr.... 2) Đang dừng quá trình. Bắt đầu một tiến trình bổ sung là một trong những việc bạn làm khi biết nửa chừng rằng mình sẽ quay lại (gỡ lỗi) để gỡ lỗi khi tiến trình (crack) (gặp sự cố) bị hủy bỏ, (treo) treo hoặc sử dụng 100% CPU. Lớp Process hiện đã được trang bị hai phương thức mới để giúp bạn kiểm soát các quy trình không theo quy tắc. Đầu tiên, isAlive() , cho phép bạn dễ dàng kiểm tra xem một tiến trình có đang chạy hay không mà không cần phải đợi nó. Thứ hai và mạnh mẽ hơn (cảnh báo!) là destroyForcibly() , cho phép bạn (không biết xấu hổ) buộc (giết) dừng một quá trình đã vượt quá thời gian của nó (chờ đợi hoặc cách khác) hoặc không còn cần thiết nữa. 3) Khóa đóng dấu. Bây giờ là một cái gì đó thực sự thú vị. Không ai thích đồng bộ hóa mã. Đây là một cách chắc chắn sẽ làm chậm hiệu suất ứng dụng của bạn (đặc biệt là trên quy mô lớn) hoặc tệ hơn là khiến ứng dụng bị treo. Tuy nhiên, đôi khi bạn không có sự lựa chọn. Có nhiều thành ngữ để đồng bộ hóa quyền truy cập đa luồng vào một tài nguyên. Một trong những ứng dụng được ưa thích nhất là ReadWriteLock và các triển khai liên quan. Thành ngữ này làm giảm sự tranh chấp bằng cách cho phép nhiều luồng sử dụng tài nguyên trong khi chỉ chặn các luồng thao tác với tài nguyên đó. Nghe có vẻ hay nhưng trên thực tế, khóa này chạy rất chậm , đặc biệt với số lượng luồng viết lớn. Điều này trở nên tệ đến mức Java 8 giới thiệu một RWLock mới có tên StampedLock . Khóa này không chỉ nhanh hơn mà còn cung cấp một API mạnh mẽ để khóa lạc quan, nơi bạn có thể có được khóa đọc với chi phí thấp với hy vọng rằng không có thao tác ghi nào xảy ra trong các phần quan trọng của mã. Ở cuối phần này, bạn hỏi khóa xem việc ghi âm có diễn ra trong thời gian đó hay không, trong trường hợp đó bạn có thể quyết định thử lại, chuyển khóa hay từ bỏ. Khóa này là một công cụ mạnh mẽ và xứng đáng được đăng một bài về chính nó. Tôi rất vui mừng về món đồ chơi mới này. Tuyệt vời! Ngoài ra bạn có thể đọc Đây . 4) Máy ghi âm cạnh tranh. Đây là một viên ngọc nhỏ khác dành cho bất kỳ ai chạy các ứng dụng đa luồng. API mới đơn giản và hiệu quả để đếm và ghi từ nhiều luồng. Đôi khi, nó thậm chí còn nhanh hơn việc sử dụng AtomicIntegers. Khá tuyệt vời! 5) Giá trị tùy chọn (hoặc tùy chọn). Ồ, con trỏ null, một vấn đề đau đầu đối với tất cả các nhà phát triển Java. Có lẽ là trường hợp ngoại lệ phổ biến nhất, nó đã xuất hiện từ rất sớm. Ít nhất là từ năm 1965 . Mượn từ Scala và Haskell, Java 8 có một mẫu mới, được gọi là Tùy chọn, để gói các tham chiếu có thể rỗng. Đây hoàn toàn không phải là một viên đạn bạc sẽ loại bỏ null, mà là một phương tiện để các nhà thiết kế API chỉ ra ở cấp mã (thay vì tài liệu) rằng giá trị null có thể được trả về hoặc chuyển cho phương thức và người gọi phải chuẩn bị cho nó Vì vậy, điều này sẽ chỉ hoạt động đối với các API mới, miễn là người gọi không cho phép tham chiếu thoát khỏi trình bao bọc, nơi nó có thể bị hủy tham chiếu một cách không an toàn. Tôi phải nói rằng tôi khá mơ hồ về tính năng này. Một mặt, null vẫn là một vấn đề lớn, vì vậy tôi đánh giá cao mọi thứ đã được thực hiện để giải quyết nó. Mặt khác, tôi khá nghi ngờ liệu điều này có thành công hay không. Điều này là do việc sử dụng Tùy chọn đòi hỏi nỗ lực bền bỉ của toàn công ty và ít có tác động ngay lập tức. Nếu không có sự thực thi mạnh mẽ, rất có thể nó sẽ nằm ở bên trái đường. Đọc thêm về Tùy chọn . 6) Chú thích mọi thứ. Một tiến bộ nhỏ khác trong ngôn ngữ Java: chú thích có thể được thêm vào hầu hết mọi thứ trong mã của bạn. Trước đây, chú thích chỉ có thể được thêm vào những thứ như khai báo lớp hoặc phương thức. Kể từ Java 8, các chú thích có thể được thêm vào các khai báo biến và tham số, khi truyền một giá trị cho một kiểu cụ thể hoặc thậm chí phân bổ một đối tượng mới. Đây là một phần trong nỗ lực tập trung (cùng với các cải tiến đối với các công cụ và API JavaDoc) nhằm làm cho ngôn ngữ trở nên thân thiện hơn với các công cụ đo lường và phân tích tĩnh (chẳng hạn như FindBugs). Đây là một tính năng hay, nhưng cũng giống như InvodDynamic được giới thiệu trong Java 7, giá trị thực sự của nó sẽ phụ thuộc vào những gì xã hội làm với nó. 7) Hoạt động tràn. Bây giờ, đây là một tập hợp các phương pháp, lẽ ra phải là một phần của thư viện cốt lõi ngay từ ngày đầu. Sở thích yêu thích của tôi là gỡ lỗi tràn số khi int vượt quá 2^32 và tiến hành tạo ra các lỗi khó chịu nhất và không mong muốn nhất (tức là "làm thế nào mà tôi lại nhận được giá trị kỳ lạ này?"). Một lần nữa, không có viên đạn bạc nào ở đây, nhưng có rất nhiều hàm để thao tác các số sẽ bị loại bỏ khi chúng tràn theo cách ít dễ tha thứ hơn so với toán tử +/* tiêu chuẩn của bạn, vốn tràn vô điều kiện. 8) Xem qua danh mục. Lặp lại nội dung của cây thư mục từ lâu đã là một trong những việc mà mọi người tìm kiếm trên Google (trong trường hợp đó bạn có thể được khuyên nên sử dụng Apache.FileUtils). Java 8 mang lại sự đổi mới cho lớp Files với mười phương thức mới. Yêu thích của tôi là walk() , tạo ra một luồng lười biếng (quan trọng đối với các hệ thống tệp lớn) để lặp qua nội dung của cấu trúc thư mục. 9) Thế hệ ngẫu nhiên mạnh mẽ. Ngày nay không thiếu những cuộc thảo luận về tính dễ bị tổn thương của mật khẩu và khóa. Bảo mật phần mềm là một công việc phức tạp và dễ xảy ra lỗi. Đó là lý do tại sao tôi thích phương pháp SecureRandom mới. getinstanceStrong() , tự động chọn trình tạo ngẫu nhiên mạnh nhất có sẵn cho Máy ảo Java. Điều này làm giảm khả năng bạn bị lỗi hoặc có trình tạo yếu, điều này sẽ khiến các khóa và giá trị được mã hóa dễ bị hack hơn. 10. Date.toInstant(). Java 8 giới thiệu một API hoàn toàn mới cho ngày và giờ . Điều này khá dễ hiểu vì cái hiện tại không tốt lắm. Về cơ bản, Joda đã hướng tới một API Java cho ngày và giờ trong vài năm. Tuy nhiên, ngay cả với API mới, vẫn còn một vấn đề lớn - có rất nhiều mã và thư viện sử dụng API cũ. Và tất cả chúng ta đều biết rằng họ vẫn ở đây. Vậy bạn sẽ làm gì? Để đạt được điều này, Java 8 đã làm một điều khá hay bằng cách thêm một phương thức mới vào lớp Date có tên là toInstant() để chuyển đổi nó thành một API mới. Điều này cho phép bạn chuyển nhanh sang API mới, ngay cả khi làm việc với mã sử dụng API ngày cũ (và sẽ tiếp tục làm như vậy trong tương lai gần).
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION