2015-12-07 1 views
0
I have a Java function that is multi-threaded by OSB (oracle service BUs).  This Java function calling three different native function through JNI. How to  call  these three function in such a way that : 
  1. La première fonction (configuration du système) n'appellera que pour le 1er thread.
  2. La 2ème fonction appellera par tous les threads.
  3. La 3ème fonction (nettoyage du système) ne sera appelée que par le dernier thread. Fonctions nativesComment gérer multithread dans Java?

    setup();

    calcul();

    Nettoyage();

    JNI fonctionne

    JNIEXPORT jvoid JNICALL Java_taxcalc_setup

    JNIEXPORT jstring JNICALL Java_taxcalc_calculation

    JNIEXPORT jvoid JNICALL Java_taxcalc_cleanup

    du code Java

    public class taxcalc {

    private static native void setup(); 
    
    private static native String calculation(String input[],double y,int); 
    
    private static native void cleanup(); 
    
    static{ 
        System.loadLibrary("CJavaInterface_64"); 
        taxcalc.setup(); 
        taxcalc.cleanup(); 
        } 
    

    chaîne taxoutput statique publique (String [] args) {

    de tableau de chaînes = "";

    for (int j = 0; j < = 5; j ++)

    {

    input[j]=args[j]; 
    

    }

    double-y;

    int BilledLines;

    y = Double.parseDouble (arguments [6]);

    BilledLines = Integer.parseInt (args [7]); Array = taxcalc.calculation (entrée, y, BilledLines,)

    tableau de retour;

    }

    public static void main (String [] args) {

     System.out.println(taxoutput(args)); 
    
    } 
    

    }

    fonction taxouput est multithread de osb.now, je veux appeler la configuration() et
    cleanup() de telle sorte que setup() ne doit être appelé que pour le premier thread et
    cleanup() ne doit appeler que pour le dernier thread.

+0

Veuillez ajouter quelques détails si vous voulez une réponse détaillée. À première vue, c'est quelque chose que les sémaphores peuvent gérer, mais nous devons en savoir plus. – biziclop

+0

pouvez-vous poster du code, ce que vous avez essayé et comment vous vous attendez à ce qu'il se comporte, de sorte que nous puissions avoir une meilleure compréhension. –

+0

Si vous avez une fonction, 'f (...)', et vous voulez seulement qu'un certain thread l'appelle, alors vous devriez seulement mettre des appels à 'f (...)' dans le code pour ce thread. –

Répondre

0

À partir du code, il semble que vous deviez initialiser et nettoyer à l'aide de fonctions natives. Cela peut être fait en utilisant java multithreading mais je chercherais d'abord des événements de rappel dans OSB à partir de laquelle vous pouvez appeler les méthodes setup() et cleanup(). De cette façon, ce serait plus propre.