2010-08-24 4 views
0

Que signifie cette ligne de l'exemple de code suivant?quelle est cette fonction sans nom?

synchronized (_surfaceHolder) { 
    _panel.onDraw(c); 
} 

Je peux deviner ce que ça fait, mais comment ça s'appelle et comment ça marche? Est-ce une fonction synchronisée sans nom?

class TutorialThread extends Thread { 
    private SurfaceHolder _surfaceHolder; 
    private Panel _panel; 
    private boolean _run = false; 

    public TutorialThread(SurfaceHolder surfaceHolder, Panel panel) { 
     _surfaceHolder = surfaceHolder; 
     _panel = panel; 
    } 

    public void setRunning(boolean run) { 
     _run = run; 
    } 

    @Override 
    public void run() { 
     Canvas c; 
     while (_run) { 
      c = null; 
      try { 
       c = _surfaceHolder.lockCanvas(null); 
       synchronized (_surfaceHolder) { 
        _panel.onDraw(c); 
       } 
      } finally { 
       // do this in a finally so that if an exception is thrown 
       // during the above, we don't leave the Surface in an 
       // inconsistent state 
       if (c != null) { 
        _surfaceHolder.unlockCanvasAndPost(c); 
       } 
      } 
     } 
    } 

Répondre

2

Il n'y a pas de méthode cachée, le code se synchronise simplement sur l'objet _surfaceHolder. Fondamentalement, il dit d'obtenir un verrou sur _surfaceHolder avant d'exécuter les lignes dans {}.

Voir Intrinsic Locks and Synchronization.

+0

Merci! Je ne savais pas comment ça s'appelait, donc je ne pouvais pas le google: p –