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:
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:
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!Code:
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;
pourquoi cette erreur est comment résoudre ce probléme?