- VisualStudio2022
- pprof-Hướng dẫn sử dụng nó trong bản mạng trực tiếp
- Triển khai C# các loại hộp chọn nhiều màu lựa chọn thả xuống, cây lựa chọn nhiều màu lựa chọn thả xuống và các nút tối đa
- [Ghi chú học tập] Cơ sở dữ liệu cấu trúc: cat tree
Trong lập trình đa luồng Java, các nhà phát triển thường gặp phải vấn đề là các luồng con không thể lấy được các Thuộc tính do luồng chính thiết lập. Các thuộc tính thường được sử dụng để lưu trữ dữ liệu liên quan đến luồng hiện tại, đặc biệt là trong các ứng dụng web, nơi chúng thường được sử dụng để quản lý ngữ cảnh yêu cầu. Tuy nhiên, do các luồng Java chạy độc lập và mỗi luồng có không gian bộ nhớ riêng nên một luồng không thể truy cập trực tiếp vào các biến hoặc thuộc tính cục bộ của một luồng khác. Bài viết này sẽ tìm hiểu chi tiết nguyên nhân của vấn đề này và cung cấp một số giải pháp hiệu quả, cùng với các ví dụ về mã có thể chạy trực tiếp.
ThreadLocal trong Java là một cơ chế biến cục bộ của luồng cho phép mỗi luồng có bản sao biến độc lập của riêng mình, tránh xung đột tài nguyên được chia sẻ trong nhiều luồng. Trong các ứng dụng web, chẳng hạn như Spring MVC, thông tin Thuộc tính của mỗi yêu cầu thường được lưu trữ trong ThreadLocal, có nghĩa là mỗi luồng chỉ có thể truy cập vào bản sao biến của chính nó. Nếu luồng chính đặt một số Thuộc tính và luồng con cố đọc trực tiếp các Thuộc tính này, thì nó sẽ không thể nhận được giá trị trong luồng chính vì các biến ThreadLocal và thuộc tính chung của luồng không được chia sẻ.
Phương pháp trực tiếp nhất là truyền Thuộc tính của luồng chính cho luồng con thông qua hàm tạo hoặc tham số phương thức khi tạo luồng con. Phương pháp này đơn giản và trực tiếp, phù hợp với các tình huống mà lượng dữ liệu Thuộc tính không lớn và dễ truyền.
Ví dụ mã:
nhập java.util.HashMap; nhập java.util.Map thuộc tính lớp { bản đồ riêng tư thuộc tính = new HashMap<>(); value); } public String getAttribution(String key) { return attribute.get(key); } } class ChildThread mở rộng Thread { thuộc tính thuộc tính riêng tư ChildThread(Thuộc tính) { this.attributes = attribute; } @Override public void run() { // Luồng phụ lấy Thuộc tính của luồng chính String value = attribute.getAttribution("key1"); thu được bởi luồng con: " + value); } } public class Main { public static void main(String[] args) { Thuộc tính thuộc tính = Thuộc tính mới(); thuộc tính.setAttribution("key1", "value1"); // Tạo và bắt đầu chuỗi con ChildThread childThread = new ChildThread(attributes); childThread.start(); try { childThread.join(); // Đợi chuỗi con kết thúc} Catch (InterruptedException e) { e.printStackTrace(); ; } } }
ChildThread nhận đối tượng Tham số thuộc tính và truy cập dữ liệu trong luồng chính trong phương thức chạy. Thuộc tính và đặt các cặp khóa-giá trị có liên kết, sau đó tạo và bắt đầu chuỗi.
ThreadLocal ThreadLocal không thể giải quyết được Quyết định vấn đề về việc thu thập chính luồng thuộc tính, nhưng trong một số trường hợp, nó cung cấp một cách rút gọn để lưu trữ các biến độc lập với luồng.
Ví dụ mã:
lớp công khai Chính { riêng tư tĩnh ThreadLocal threadLocal = ThreadLocal.withInitial(() -> ""); public static void main(String[] args) { // Luồng chính đặt giá trị ThreadLocal threadLocal.set("giá trị của luồng chính"); Chủ đề mới(() -> { // Chủ đề con nhận giá trị ThreadLocal String value = threadLocal.get(); System.out.println("Giá trị ThreadLocal thu được bởi thread con: " + value }); ; // Chờ kết thúc luồng} Catch (InterruptedException) e) { e .printStackTrace();
Trong ví dụ này, chúng tôi sử dụng ThreadLocal.withInitial để đặt giá trị ban đầu cho ThreadLocal. con, chúng ta sử dụng threadLocal.get() để lấy ThreadLocal giá trị của luồng hiện tại. Sẽ lấy giá trị riêng của ThreadLocal (trong ví dụ này là giá trị ban đầu "") chứ không phải giá trị do main thread đặt ra.
Trong Spring MVC, nếu bạn muốn chia sẻ các yêu cầu đối tượng hoặc các thuộc tính khác giữa các luồng và con, bạn có thể sử dụng sử dụng InheritableThreadLocal.
Tuy nhiên, cần lưu ý rằng chỉ thay thế ThreadLocal bằng InheritableThreadLocal là chưa đủ để đạt được sự chia sẻ dữ liệu giữa các luồng cha và con. constream thừa boolean.
Tuy nhiên, việc vận hành requestContextHolder và InheritableThreadLocal trực tiếp trong người dùng mã hóa có thể phức tạp và dễ xảy ra lỗi trong các ứng dụng. thực tế, điều phổ biến hơn là tránh truy cập trực tiếp vào các thuộc tính liên quan đến HTTP yêu cầu trong các luồng con chuyển dữ liệu được yêu cầu thông qua các phương thức khác (chẳng hạn như tham số truyền tải, use object dùng chung, vv).
Sử dụng InheritableThreadLocal liên kết đến cơ chế bên trong Spring MVC và hoạt động trực tiếp có thể xử lý lại tạp chất phức tạp không cần thiết nên bài viết này không cung cấp cụ thể các ví dụ mã hóa InheritableThreadLocal. liệu hoặc mã nguồn liên quan đến Spring MVC để tìm hiểu cách sử dụng InheritableThreadLocal nhằm đạt được sự chia sẻ dữ liệu data giữa các luồng và con trong cụ thể các vấn đề.
Trong đa luồng Java cài đặt, một biến phổ biến của vấn đề là các luồng không thể truy cập trực tiếp vào các thuộc tính của luồng chính ThreadLocal (for data) data độc lập với luồng). mặc dù InheritableThreadLocal cung cấp một giải pháp giải quyết vấn đề này nhưng hoạt động thực tế có thể liên kết đến phức hợp cơ chế nội bộ thùng của Spring MVC. cũng như khả năng bảo trì của mã hóa.
Quay lại đầu trang tốt hơn và cải thiện hiệu suất cũng như độ ổn định của chương trình.
Nếu bạn muốn biết thêm về giải pháp cho luồng vấn đề với Java không thể lấy thuộc tính, vui lòng tìm bài viết CFSDN hoặc tiếp tục duyệt bài. viết liên quan, tôi hy vọng tất cả các bạn sẽ ủng hộ blog của tôi trong tương lai .
Tôi có mã html này: HELLO WORLD! XV HELLO WORLD!
Có hai cách tiếp cận chính để thiết kế cơ sở dữ liệu nhằm lưu trữ nhật ký dữ liệu và đăng ký trong nhiều ứng dụng sử dụng các kế toán khác nhau.
Bằng cách nào để thực hiện điều này trong Perl không?
Tôi có một số mã đang tìm kiếm các ô trùng lặp và đánh dấu các ô: Private Sub cmdDups_Click() Dim Rng As Range Dim cel As Range Set Rng = ThisW
Có thể có một giải pháp đơn giản nhưng tôi đang bối rối. in two field can.
Giả sử tôi có một mảng chứa các đối tượng: [ { "id": "5a97e047f826a0111b754beb", "name": "Hogwarts", "parentId": "
Tôi đang cố gắng thực hiện chèn hàng loạt một cặp mô hình cha/con vào bảng cơ sở dữ liệu MySQL, nhưng dường như tôi không thể thực hiện việc đó bằng chức năng ActiveRecord tiêu chuẩn. Vì vậy, tôi đã thử đá quý nhập khẩu activerecord nhưng nó cũng không hỗ trợ
Tôi có một lớp trừu tượng cha mẹ với nhiều lớp con. Cuối cùng, tôi muốn hiển thị tiến trình đã hoàn thành trong lớp con thông qua thanh tiến trình trong GUI. Những gì tôi hiện đang làm và tôi nhận ra rằng điều này sẽ không hiệu quả, là khai báo định nghĩa phương thức sự kiện trong lớp cha dưới dạng phương thức ảo mà mỗi lớp con sẽ ghi đè. Vì vậy, thích: quán rượu
Có thể đặt một biến trong một đối tượng thông qua một mảng khóa không? Ví dụ: tôi có đối tượng này: var obj = {'outer': {'inner': 'value'} } và muốn đặt giá trị được chọn bởi mảng khóa: var key = ['ou
Tôi có một bảng MySQL có tên các công ty như sau: +----------+----------+----------+ id_comp | id_pare
Tôi đang cố mở ứng dụng đầu tiên của mình trên ionic trên văn bản siêu phàm bằng văn bản siêu phàm. Nó báo lỗi "không tìm thấy lệnh". Làm thế nào để khắc phục nó? Tôi đã thử các lệnh sau: sudo rm -r
Rất tiếc phải hỏi, nhưng tôi đang sử dụng webapp2 và tôi đang thiết kế một giải pháp để giúp xác định tuyến đường dựa trên chức năng tuyến đường webapp2 của google này dễ dàng hơn. Nhưng tất cả phụ thuộc vào khả năng thực hiện điều đó ở cấp độ trẻ em.
Mình có dãy số tượng trưng cho cây (không biết có tên chính thức không): 012323301212 Ví dụ trên tượng trưng cho 2 cây. Gốc được biểu thị bằng 0. Con cháu trực tiếp của gốc là "1", con cháu trực tiếp của "1" là "2", v.v. Tôi cần nhóm chúng thành các nhóm bao gồm
Có thể thêm Hoạt động lên trên Hoạt động hiện tại không. Ví dụ: giả sử tôi nhấp vào một nút và sau đó nó thêm Hoạt động thứ hai vào Hoạt động hiện tại. Và Hoạt động thứ hai chỉ bao gồm hiện tại của tôi
Tôi đang gặp khó khăn khi nghĩ về cách lập mô hình các nguồn tài nguyên phụ. Lấy sách của tác giả làm ví dụ. Bạn có thể có N cuốn sách, mỗi cuốn chỉ có một tác giả. /books GET /books POST /books/id PUT /books/id DELETE to
Ai có thể giải quyết cho tôi hai số chuỗi sau (python 2.7) từ một cú pháp phân tích tệp: '410.9''410.9 ' (lưu ý các khoảng trắng ở cuối) A_LIST = ['410.9 '] '410.9' in '41
Cảnh báo việc xây dựng bảng băm trong PowerShell để truy cập nhanh các thông tin đối tượng qua các công cụ thuộc tính rất quan trọng biến phổ, được thiết lập dựa trên chỉ mục dựa trên LastName: $List = ConvertFrom-Csv @' I
Tôi thực sự đang gặp khó khăn trong công việc tìm ra cách gọi các hàm từ các thành phần web Polymer lồng nhau. Đây là dấu hiệu: thành công. phần phân phối có canPlay và tôi muốn xóa nó khỏi danh sách phát hành
Tôi đã viết một công cụ xuất nhỏ (ở định dạng dấu chấm) biểu đồ phụ thuộc của dự án, trong đó Tất cả các tệp nằm trong cùng một thư mục được tập hợp lại trong một cụm Khi tôi cố gắng tạo một. bản pdf chứa đồ họa tương ứng, dấu chấm bắt đầu kêu: lệnh dot -Tpdf Trim
CODE, có có thể chứa các phần tử của phân tích cây được trả về trong 1 Thông thường, chúng ta
Tôi là một lập trình viên xuất sắc, rất xuất sắc!