Tôi không biết khi nào tôi nên sử dụng Multithread trong phát triển Java và logic/lý do sử dụng nó. Làm thế nào nó giúp đỡ trong các tình huống khác nhau?
Bạn nên thay đổi chương trình của mình để sử dụng chuỗi vì một vài lý do khác nhau.
Khi chương trình chạy nhanh hơn và sử dụng tốt hơn kiến trúc nhiều CPU/lõi mà bạn đang chạy. Tôi sử dụng từ "đáng kể" bởi vì thường thêm chủ đề thêm rất nhiều phức tạp để cải thiện tốc độ 20% có thể không đáng giá. Tuy nhiên, có thể khó khăn để xác định xem chương trình của bạn có sử dụng nhiều bộ vi xử lý đúng cách để việc làm lại chương trình là một sự đầu tư tốt hay không. Tuy nhiên, điều này có thể khó khăn. Chỉ khi có rất nhiều xử lý/tính toán liên quan bạn sẽ nhận được một sự gia tăng tốc độ. Ví dụ, nếu chương trình của bạn đang chờ IO (đĩa hoặc đọc mạng hoặc viết) thì bạn có thể dành nhiều công việc tách một chương trình thành nhiều luồng chỉ để không thấy cải thiện tốc độ.
Khi có nhiều phần của chương trình sẽ chạy đồng thời. Nó không phải là nó không thể chạy trong một sợi nhưng để làm như vậy sẽ phức tạp hơn. Ví dụ, một máy chủ web có nhiều yêu cầu xử lý chủ đề vì nó dễ dàng hơn để có mỗi thread xử lý một yêu cầu duy nhất mặc dù bạn có thể không được đặt một tấn tải thông qua máy chủ để nhiều chủ đề làm cho nó thực hiện nhanh hơn.
Ngoài ra: Câu hỏi tương tự cho J2EE thứ, khi tôi nên sử dụng multithread trong servlets của tôi? Hay tôi nên không?
Tôi nghĩ rằng các câu trả lời tương tự ở trên sẽ áp dụng. Nói chung servlet là những nhiệm vụ rất nhỏ được thiết kế để quay trở lại nhanh chóng vì vậy nó là tương đối bất thường đối với họ để đề ngã ba. Tuy nhiên, nếu có một nhiệm vụ chạy dài mà một servlet cần khởi động nhưng bạn muốn nó trả về kiểu trả lời "Bắt đầu công việc" thì một chuỗi sẽ là cần thiết. Điều quan trọng cần lưu ý là vào thời điểm servlet của bạn được thực hiện, trình xử lý ngược dòng có thể đã sử dụng một nhóm luồng để bạn không phải làm gì cả.
Edit:
Kịch bản 1 - Tôi đang thực hiện một di chuyển trò chơi 2D với kẻ thù và tất cả những gì, suy nghĩ của sên kim loại
Tôi không có một tốt trả lời cho điều này. Phụ thuộc vào việc có rất nhiều kết xuất đang diễn ra và nó phụ thuộc vào những bộ công cụ bạn đang sử dụng.
Tình huống 2 - Tôi đang tạo một trình nền cơ sở dữ liệu để kiểm tra nhiều nội dung cơ sở dữ liệu.
Rất có thể bạn sẽ là cơ sở dữ liệu IO bị ràng buộc để nhiều chủ đề có thể không cung cấp cho bạn bất cứ điều gì. Sau đó, một lần nữa, nếu bạn có các truy vấn chạy dài, bạn có thể nhận được một số cải tiến nếu các truy vấn ngắn có thể được thực thi song song với các chủ đề khác. Điều này cũng phụ thuộc vào cách cơ sở dữ liệu của bạn xử lý nhiều kết nối.
Tình huống 3 - Tôi đang tạo một servlet cho JSP, với một số thông tin được tìm nạp từ cơ sở dữ liệu.
Nếu phản hồi phải chờ thông tin được tìm nạp thì không có lý do gì để thực hiện điều này trong chuỗi khác. Tuy nhiên, như tôi đã đề cập ở trên, nếu servlet đang cố gắng chia rẽ một số loại giao dịch cơ sở dữ liệu chạy trong nền thì bạn nên sử dụng một luồng.
Một lần nữa, hầu hết các thùng chứa servlet đã chạy bên trong một nhóm luồng.
cách câu hỏi quá chung chung ... – Sebastian
@Sebastian Well .... Tôi đã tìm kiếm một chút và tôi thấy điều này, nhưng tôi không hài lòng với câu trả lời. Vì vậy, tôi hỏi lại theo cách mà tôi muốn. Nếu điều này quá rộng thì đó là câu hỏi này: http://stackoverflow.com/questions/7419619/ –
Tôi tin rằng câu hỏi là đủ cụ thể để được tạm ngừng. – supersam654