2012-03-28 22 views
6

Các câu dưới đây đã được hỏi trong một cuộc phỏng vấn của tôi (vài năm trở lại)Java - Mang thread chết trở về sống

gì là tất cả các khả năng/cách để mang lại thread chết trở về sống (Trạng thái Runnable)

Tôi đã bảo vệ rằng không có cách nào. Nhưng anh ấy đã ép tôi suy nghĩ. Có bất kỳ tùy chọn có sẵn thực sự? Hay anh ấy chỉ kiểm tra sự tự tin của tôi đối với câu trả lời của tôi?

+0

Tôi giả sử bạn muốn * cùng một đối tượng Thread * và không tạo chủ đề mới [sử dụng Thread constructor (Runnable)] – amit

+0

@amit Có. Nó nên là cùng một đối tượng –

+0

Xin vui lòng, cố gắng nhớ chính xác những gì đã làm anh chàng nói, vì nó không rõ ràng cho dù ông đã hỏi về hồ bơi thread hay không. –

Trả lời

3

Tôi nghĩ rằng anh ấy đang cố gắng giới thiệu bạn về kiến ​​thức của bạn về ThreadPools. Các chủ đề không thể được hồi sinh như bạn đã nói, nhưng bằng cách sử dụng hồ bơi thread hoặc khung thực thi mới hơn, chúng tôi có thể giảm chi phí tạo đối tượng.

+0

Ông thực sự có thể đã được prodding về điều này, nhưng nó không trả lời câu hỏi, ngay cả khi ông nghĩ rằng nó. Hồ bơi chủ đề ngăn chặn chấm dứt chủ đề của họ; họ không làm sống lại chúng từ cõi chết. – EJP

5

Trạng thái chết: Chủ đề có thể được coi là đã chết khi phương thức run() của nó hoàn tất. Nếu bất kỳ chuỗi nào xuất hiện trên trạng thái này, điều đó có nghĩa là nó không thể chạy lại được nữa.

+0

Hmm. Thật. Có bất kỳ hack nào có sẵn để làm cho nó có thể? –

+0

trước khi chạy hoàn tất, bạn có thể thực hiện nhưng sau đó, hãy xem vòng đời http://www.iam.ubc.ca/guides/javatut99/essential/threads/lifecycle.html –

+0

@Siva Không có bất kỳ hack nào để làm cho nó có thể . Tôi giả định rằng người phỏng vấn thực sự đã không thực sự hiểu luồng, và đã suy nghĩ về một cái gì đó như nối lại một sợi bị đình chỉ (không được chấp nhận). – Jon

4

Bạn có thể sử dụng các đối tượng Thread cũ để tạo một hình mới, đó là khá nhiều điều tương tự:

(new Thread(oldThread)).start(); 
+0

Nó không giống nhau. Nó là một vật thể mới, hai điều hoàn toàn khác nhau. – amit

+1

Sử dụng cùng một đối tượng là không thể, vì vậy tôi đã đề xuất một giải pháp thay thế hợp lý. – Jivings

0

Nó phụ thuộc vào những gì bạn có nghĩa là bởi một Nhà nước Dead. Nếu bạn có một Chủ đề "ngủ", nó sẽ không hiệu quả trong bất kỳ công việc nào, vì vậy bạn có thể 'hồi sinh' nó và làm cho nó tiếp tục chạy từ thời điểm này trở đi. Mặc dù Chủ đề không chết, nó đã ngủ, và bạn đã mang nó trở lại cuộc sống.

-2

Vâng tôi đã hỏi câu hỏi tương tự. Khi tôi nói không, anh ấy hỏi tôi có quen với khái niệm Threadpool được lưu trong bộ nhớ cache hay không.

Ông cho biết chủ đề được trả lại từ hồ bơi và họ yêu cầu nhiều dịch vụ như thế nào để họ làm điều đó nếu nó chỉ có thể được bắt đầu một lần. Ông cũng bắn phá tôi với câu hỏi tương tự như không WebLogic sử dụng cùng một chủ đề để phục vụ tất cả các yêu cầu hoặc nó giữ trên tạo chủ đề mới cho mỗi yêu cầu.

Tôi đã xem nhật ký weblogic và tôi đã thấy Thread - 0 được in ra và thực hiện nhiều tác vụ. Tôi không chắc liệu weblogic có tạo ra một chủ đề mới trong cùng một hồ bơi hay cùng một chủ đề hay không, vì vậy tôi chỉ cố chuyển người phỏng vấn sang một câu hỏi khác bằng cách trả lời theo cách để đưa anh ta xa hơn từ câu hỏi này.

trả lời cho câu hỏi này là, chúng tôi thực sự cung cấp đối tượng Runnable để các chủ đề và nó không chấm dứt ví dụ:

while(doINeedToKeepRunning()){ 
    if(hasMoreTasks()){ 
     getFirstTask().run();. 
    } 
    else 
    { 
     waitForOtherTasks(); 
    } 
} 

Hy vọng điều này trả lời câu hỏi của bạn. Vì vậy, chủ đề như vậy đã không chấm dứt họ chỉ cần chờ đợi cho các đối tượng runnable hoặc gọi.

Tôi biết điều này nghe có vẻ ngu ngốc. Nhưng đây là câu trả lời mà họ đang tìm kiếm trong một cuộc phỏng vấn. Tôi thấy siva đã hỏi câu hỏi này trong bối cảnh phỏng vấn và tôi đoán anh ấy đang ở ẤN ĐỘ, vì vậy tôi biết chính xác những gì người phỏng vấn đang cố gắng làm sau khi tự mình phỏng vấn rất nhiều. Tôi đã thử tất cả các câu trả lời khác nhưng họ không dừng lại cho đến khi họ nhận được câu trả lời này. Phần còn lại là trên siva mà câu trả lời ông muốn chọn để trả lời chúng. Vấn đề đặt ra câu hỏi vô nghĩa như vậy là làm cho người bị thẩm vấn nhầm lẫn và khiến anh ta thay đổi câu trả lời của mình và kiểm tra kiến ​​thức của mình trong việc thực hiện hồ bơi luồng.

Như chúng ta đã biết khi chuỗi bị chấm dứt, nó không thể chạy lại được. Vì vậy, dính vào những gì bạn biết rồi. Không bao giờ một sợi chỉ chết không thể mua lại được nữa.nhưng nếu họ bắn phá bạn với những thứ khác giống như cách các chủ đề tái sử dụng weblogic cung cấp cho họ câu trả lời ở trên. Phần còn lại là tất cả mong muốn của bạn.

+0

Người phỏng vấn dường như đang đặt một câu hỏi và mong đợi một câu trả lời cho một câu hỏi khác. Một chuỗi đã chấm dứt không thể được hồi sinh, thời gian. Sử dụng một hồ bơi thread chỉ là một cách để ngăn chặn chấm dứt, không phải là một cách để hồi sinh. Nó có vẻ giống như một câu hỏi vô nghĩa vòng quanh. – EJP

+0

Tôi biết điều này nghe có vẻ ngu ngốc.Nhưng đây là câu trả lời họ đang tìm kiếm trong một cuộc phỏng vấn. Tôi thấy siva hỏi câu hỏi này trong bối cảnh phỏng vấn và tôi biết chính xác những gì người phỏng vấn ở Ấn Độ đang cố gắng làm sau khi tự mình phỏng vấn . Tôi đã thử tất cả các câu trả lời khác nhưng họ không dừng lại cho đến khi họ nhận được câu trả lời này. Phần còn lại là trên siva mà câu trả lời ông muốn chọn để trả lời chúng. Vấn đề đặt ra câu hỏi vô nghĩa như thế là làm cho người bị thẩm vấn nhầm lẫn và làm cho anh ta thay đổi câu trả lời và kiểm tra kiến ​​thức của anh ta trong việc thực hiện pool thread. Nhưng đôi khi mọi người thay đổi câu trả lời của họ. –

Các vấn đề liên quan