2010-09-14 3 views
1

J'ai une classe MyLock qui implémente l'interface Lock. Maintenant, le constructeur dans MyLock accepte deux objets Thread comme paramètres.Test de verrouillage personnalisé en Java

Je suis en train d'écrire une classe de test pour MyLock.

public class TestMyLock 
{ 
    static MyLock mylck; 

    public static void main(String[] args) 
    {   

     Thread t1 = new Thread(new Runnable(){ 
      public void run(){ 

       mylck.lock();  //1 - gives error 
          //Critical code 

       mylck.unlock();     
      } 

     }); 
     Thread t2 = new Thread(new Runnable(){ 
      public void run(){ 

       mylck.lock(); 
          //Critical code     
       mylck.unlock();     
      } 

     }); 

     mylck = new MyLock(t1, t2); //where to place this 

     t1.start(); t2.start(); 

    } 
} 

Où est mon code de test qui ne va pas? Fondamentalement, j'ai besoin de tester ma fonctionnalité MyLck.

EDIT: L'erreur -1 est due au fait que myLck n'est pas initialisé. Cela donne une erreur de compilation. Je voudrais savoir comment initialiser ceci, puisque pour initialiser, j'ai besoin de passer les objets de fil.

+0

donne une erreur: laquelle? et êtes-vous sûr que c'est le bon code? (thread1 <-> t1) –

+0

Votre code, exactement comme écrit ici, ne produit pas d'erreur de compilation pour moi. Quel compilateur/IDE utilisez-vous? – Sbodd

Répondre

0

Je pense qu'il serait préférable de mettre mylck.lock() ... mylck.unlock() dans une boucle pour le faire fonctionner plus longtemps pour détecter les défauts si cela est possible. Nous devons savoir comment MyLock.lock() est implémenté pour voir quelle est l'erreur.

0

Je ne vois pas ce qui ne va pas avec cette classe principale. La création du verrou est faite avant le démarrage des threads, donc la référence mylck utilisée dans les deux méthodes run ne sera pas nulle quand call => c'est ok. Sur une note de côté, pourquoi implémentez-vous votre propre cadenas? Le package java.util.concurrent.locks fournit plusieurs implémentations communes.

+0

J'essaye de trouver un code de test pour vérifier mon exercice de hw, qui consiste à écrire un verrou. – Diby

+0

Ok, donc je pense que votre code de test est correct. Bien sûr, cela dépend des lignes de section critiques et de la façon dont vous testez que ces lignes ont vraiment été "verrouillées" –

Questions connexes