Salut
Je suis entrain de developper une application desktop java multi-thread.
j'ai une table utilisé pour stocké un valeur utilisé comme séquences.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
 CREATE TABLE "MESSAGE_SEQUENCE" 
   (	
	"VALEUR_SEQ" NUMBER(20,0), 
	"BLOCAGE" NUMBER(1,0) DEFAULT 0
   ) ;
  • La colonne VALEUR_SEQ contient la valeur de la séquence

  • La colonne BLOCAGE contient 0 ou 1,le premier thread qui execute une procedure met la valeur à 1 pour empêcher les autre threads d'accéder simultanément à la table.une fois il a recupérer la valeur VALEUR_SEQ , il augmente VALEUR_SEQ et rend BLOCAGE à 0.

cette table est utilisé par plusieurs procédures stockés utilisé par mon application:voici le code qui permet de recupérer la valeur VALEUR_SEQ:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
LOOP
	BEGIN
            SELECT BLOCAGE INTO BLOCAGE FROM MESSAGE_SEQ  FOR UPDATE of BLOCAGE;
	   IF BLOCAGE =0 THEN
	   	UPDATE  MESSAGE_SEQ SET BLOCAGE= 1 ;
	   	SELECT VALEUR_SEQ + 1 INTO V_COD_MES_INT FROM MESSAGE_SEQ ;
	  	UPDATE  MESSAGE_SEQ SET VALEUR_SEQ= VALEUR_SEQ + 1; 
	  	UPDATE  MESSAGE_SEQ SET BLOCAGE= 0 ;
       		EXIT;
	   END if;
D'abord tout marche bien mais aprés repéter les tests plusieurs fois,une erreur apparaît; en fait ,parfois la valeur de BLOCAGE se bloque à la valeur 1 empêchant ainsi tous les threads d'accéder au code!
pourquoi cette erreur est comment résoudre ce probléme?