2010-05-19 23 views
8

Tôi cần gọi tệp .jar trong JVM riêng biệt từ một ứng dụng java khác, và nó rất tiêu thụ CPU, vì vậy nó nên chạy với mức ưu tiên nền để không ảnh hưởng đến phần còn lại của hệ thống. Có phương pháp đa nền tảng nào để làm điều này không?Cách đa nền tảng để thay đổi ưu tiên quá trình java

+0

trong * "viết một lần, chạy ở mọi nơi" * ý nghĩa đa nền tảng, không. Nhưng tạo một đoạn mã không di động nhỏ sẽ hoạt động trên mọi Un * x (bao gồm OS X) và mọi máy tính Windows thực sự không khó. +1 cho câu trả lời của Stephen C. – SyntaxT3rr0r

Trả lời

3

Câu trả lời đơn giản là không có cách di động nào để thay đổi mức độ ưu tiên của Quy trình trong Java. (Chủ đề - có, Quy trình - không.)

Nếu ứng dụng Java của bạn cần khởi động một JVM mới để chạy ứng dụng chuyên sâu của CPU, thì cơ hội là nó chưa hoàn toàn di động. Ví dụ, bạn thường sẽ cần phải đặt tên đường dẫn của lệnh java (hoặc tương đương), một đối số -cp đối số (hoặc tương đương), tùy chọn JVM cụ thể của hệ thống, v.v. Vì vậy, giả sử rằng lệnh để khởi chạy JVM là đã không di động, nó hầu như không quan trọng nếu bạn thay thế lệnh bằng một kịch bản lệnh bao hàm những điều cụ thể của OS để thay đổi mức độ ưu tiên của quá trình được khởi chạy. Quay lại đầu trang (Ví dụ: đối với UNIX hoặc Linux, bạn có thể chỉ cần sử dụng nice để khởi chạy JVM.)

1

Tôi không biết cách đặt mức độ ưu tiên cho quy trình bên ngoài. Tuy nhiên Thread có một phương pháp setPriority, vì vậy nếu bạn kiểm soát các ứng dụng mục tiêu, bạn có lẽ có thể thêm một công tắc, nói với các ứng dụng để thiết lập ưu tiên riêng của mình để tối thiểu:

theThread.setPriority(Thread.MIN_PRIORITY);

Nếu nó vẫn ảnh hưởng đến hệ thống, tôi đề nghị bạn xen kẽ một số ngắn sleep ing để giảm tải CPU.


Một tùy chọn khác:

Nếu bạn đặt mục tiêu .jar trong classpath của ứng dụng "bắt đầu", bạn có thể chỉ đơn giản là gọi main -method của jar-file trong một thread mới được tạo và sau đó đặt mức độ ưu tiên bằng phương pháp trên. (Điều này sẽ hoạt động ngay cả khi bạn không kiểm soát mã nguồn của tệp jar mục tiêu.)

+1

Tôi hiểu anh ta cần phải sinh ra một quá trình khác, và phương pháp này là cho một sợi, vì vậy tôi don 'nghĩ rằng nó có thể làm việc ... – Persimmonium

+0

oh .. hmm .. điểm tốt. Tôi cho rằng điều này chỉ có ý nghĩa sau đó, nếu có khả năng thêm một chuyển đổi cho chương trình đang được thực hiện. – aioobe

+0

Nếu anh ta có nguồn của quá trình khác đang chạy, nó có thể tự đặt thành MIN_PRIORITY, đúng không? –

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