2012-03-20 2 views
2

Я пытаюсь написать небольшой тест, где я пытаюсь изменить приоритет потока Java, чтобы установить его в свойство реального времени в моем ядре Scientific Linux.Изменение приоритета нити с помощью вызова JNI в Java

Я понял, что это нужно сделать с помощью вызова JNI, используя Thread.MAX_PRIORITY или Thread.MIN_PRIORITY, никогда не будет сопоставлять его с приоритетами в реальном времени.

Я в тупике, как я могу получить доступ к моему потоку java из моего собственного кода. Ниже моя Java программа:

public class ThreadPriorityTest implements Runnable { 

    public static int numThreads; 

    public void run() { 
     System.out.println("***Java: Changing thread priorities"); 
     changePriority(); 
    } 

    public static synchronized native void changePriority(); 

    public static void main(String[] args) { 
     if(args.length != 1) { 
      System.out.println("Usage: ThreadPriorityTest <num_of_threads>"); 
      System.exit(0); 
     } 

     numThreads = Integer.parseInt(args[0]); 

     for(int i = 0; i < numThreads; i++) { 
      Thread t = new Thread(new ThreadPriorityTest()); 
      t.start(); 
     } 
    } 

} 

ответ

5
How can i get access to my java thread from my native code? 

Когда вы совершаете переход с Java на нативный через JNI, нет переключения потоков. Когда вы находитесь в собственном коде, текущий поток - это тот же самый поток ОС, который выполнялся перед прыжком. Делайте то, что вы хотите для текущего потока, в то время как в собственном коде. Если вам нужно проверить, не изменились ли ваши изменения, вернитесь к native после возвращения JNI для запуска каких-либо проверок изменений.

-1

С JDK 1.5, есть long Thread#getId() метод, который может быть один вы искать. Чтобы проверить, сравните результат, возвращенный этим методом, с nid (собственный идентификатор) из сгенерированного потока дампа (дамп может быть произведен kill -3 java_pid).

ОБНОВЛЕНИЕ Похоже, getId() возвращает некоторый другой идентификатор, внутренний для JVM и не подключенный к ОС.

Хотя, не уверен, что изменение приоритета потока позади JVM назад - хорошая идея. Для Java существует некоторое расширение Real-Time, которое может быть тем, что вы ищете.

Смежные вопросы