2017-10-18 19 views
1

De langage de programmation Pragmatique, par ScottQue signifie "composer" dans le contexte de la simultanéité?

Le fait que la correction dépend de verrouillage afin signifie que des fragments de programme à base de blocage ne composer: nous ne pouvons pas prendre des abstractions à base de blocage existant et en toute sécurité les appeler à l'intérieur une nouvelle section critique.

Que signifie "composer"?

Pourquoi les fragments de programme verrouillés ne sont-ils pas composés?

De Transform Java Future into a CompletableFuture

Java 8 introduit CompletableFuture, une nouvelle mise en œuvre de l'avenir qui est composable (comprend un tas de méthodes thenXxx). Je voudrais l'utiliser exclusivement, mais la plupart des bibliothèques que je veux utiliser renvoient uniquement non composable Instances futures.

Qu'est-ce que cela signifie par le fait que certaines instances futures sont composables et d'autres non?

Merci.

+0

Cela signifie combiner/organiser des pièces pour créer quelque chose de nouveau. – shmosel

+0

Merci. Pourriez-vous me montrer comment cela se fait dans le code, ou me montrer de tels exemples? – Ben

Répondre

1

Pour la première partie, toute chose basée sur un cadenas n'est pas triviale à composer. À tout le moins, pour éviter les verrous morts, vous devez définir un ordre de verrouillage et l'utiliser partout. En outre, un verrou doit être acquis pendant une très courte période, vous devez donc éviter de bloquer le code qui peut bloquer, comme les opérations longues ou l'attente d'E/S. Pour la deuxième partie, l'interface Future<V> ne se compose pas bien car la seule façon de savoir quand elle se termine est d'interroger ou de bloquer (isDone() et get()). Vous n'avez aucun autre moyen d'être informé de l'achèvement de Future<V>.

Il existe des contrats à terme spécifiques qui se composent facilement, tels que CompletableFuture<V>, ce qui vous permet d'être notifié à la place de l'interrogation ou du blocage. Cependant, si vous obtenez l'un d'entre eux en tant que Future<V>, vous ne pourrez pas profiter de son mécanisme de notification. Vous pouvez essayer de lancer l'interface CompletionStage<V>, qui contient les méthodes de composition.