Time for action – allocating an object with JNI
Let's define a background Watcher that will use an object shared between Java and C/C++ as a lock:
In
Store.java, add two new methods to start and stop a watcher thread. These methods respectively return and take alongas parameter. This value helps us hold a native pointer on the Java side:public class Store implements StoreListener { ... public native long startWatcher(); public native void stopWatcher(long pPointer); }Create a new file,
StoreThreadSafe.java. TheStoreThreadSafeclass inherits from theStoreclass and aims at making theStoreinstances thread-safe usingsynchronizedJava blocks. Declare a static member fieldLOCKof typeObjectand define a default constructor:package com.packtpub.store; import com.packtpub.exception.InvalidTypeException; import com.packtpub.exception.NotExistingKeyException; public class StoreThreadSafe extends Store { protected static Object LOCK; public StoreThreadSafe(StoreListener...