2012-05-11 3 views
1
void Java_Package_Multithreading_againCallReadFile 
    (JNIEnv *env, jobject obj) { 

if((*env)->MonitorEnter(env,obj) == JNI_OK) { 
    printf("Now you can call the synchronised method !"); 
} else { 
    printf("oops ! Failed to acquire the lock."); 
    } 
} 

Из приведенного выше метода я хочу проверить, могу ли я вызвать метод, который синхронизирован и может использоваться другим потоком. Что делает MonitorEnter действительно проверка. Я прочитал его документацию, но не понимаю, что это такое. Что я хочу сделать, вызовите этот синхронизированный метод после проверки безопасного вызова этого метода. Вышеуказанный метод кажется неправильным, потому что даже когда оператор if выполняется, я получаю фатальную ошибку.Использование MonitorEnter: Как мне вызвать синхронизированный метод?

ответ

0

По documentation делать MonitorEnter (окр, объект), как с помощью нативного Java synchronizatioin statement on object

synchronized (obj) { 
    ... // synchronized block 
} 

так в вашем примере вы используете this в качестве объекта синхронизации, и это должно быть хорошо, я думаю. Но не забудьте использовать MonitorExit() в конце вызова.

Что такое stacktrace исключения?

+0

[NO STACKTRACE GETS PRINTED!] (Http://i47.tinypic.com/33pbu36.jpg) –

+0

Но каково содержание hs_err_pid5536.log? И другие звонки dll делают нормально без проблем? –

+0

[вы можете проверить эту ссылку. Это не помогает мне] (http://suhail03.my3gb.com/hs_err_pid5536.log) –

1

«Что я хочу сделать, вызовите этот синхронизированный метод после проверки, если безопасно назвать этот метод».

Это не имеет никакого смысла. Просто позвоните. Если метод уже синхронизирован, вы не добавляете никакого значения. Вызов «MonitorEnter» не «проверяет, можно ли вообще вызвать этот метод». Он утверждает, что блокировка объекта, который вы поставляете.

+0

, но затем я получаю фатальную ошибку, если вы звоните, что синхронизированная функция, которая может спать или делать ее работу –

+0

@ program-o-steve Какая фатальная ошибка? – EJP

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