lang:java:thread
                Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| lang:java:thread [2023/05/31 14:32] – Ajout de "Semaphore" root | lang:java:thread [2023/06/12 15:07] (Version actuelle) – Ajout de "Nommage des threads" root | ||
|---|---|---|---|
| Ligne 34: | Ligne 34: | ||
| '' | '' | ||
| - | Quand une exception est générée, elle est transformée en une '' | + | Quand une exception est générée, elle n'est pas remontée au thread principale. Elle est transformée en une '' | 
| <code java> | <code java> | ||
| Ligne 62: | Ligne 62: | ||
| } | } | ||
| </ | </ | ||
| + | |||
| + | Sortie standard : | ||
| < | < | ||
| Ligne 79: | Ligne 81: | ||
| </ | </ | ||
| + | Si l' | ||
| + | |||
| + | <code java> | ||
| + | import java.io.IOException; | ||
| + | import java.util.concurrent.Callable; | ||
| + | import java.util.concurrent.ExecutionException; | ||
| + | import java.util.concurrent.ExecutorService; | ||
| + | import java.util.concurrent.Executors; | ||
| + | import java.util.concurrent.FutureTask; | ||
| + | |||
| + | public class MyClass { | ||
| + |   public static class SecuredFutureTask< | ||
| + |     public SecuredFutureTask(Callable< | ||
| + |       super(callable); | ||
| + | } | ||
| + | |||
| + | @Override | ||
| + | protected void done() { | ||
| + | try { | ||
| + | get(); | ||
| + | } catch (ExecutionException | InterruptedException e) { | ||
| + |         throw new AssertionError(e); | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | public static void main(String args[]) { | ||
| + |     FutureTask< | ||
| + |         new SecuredFutureTask< | ||
| + |     ExecutorService executor = Executors.newFixedThreadPool(2); | ||
| + |     executor.execute(futureTask); | ||
| + |     System.out.println(" | ||
| + |     executor.shutdown(); | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Sortie standard : | ||
| + | |||
| + | < | ||
| + | OK | ||
| + | |||
| + | Exception in thread " | ||
| + | 	at MyClass$SecuredFutureTask.done(MyClass.java: | ||
| + | 	at java.base/ | ||
| + | 	at java.base/ | ||
| + | 	at java.base/ | ||
| + | 	at java.base/ | ||
| + | 	at java.base/ | ||
| + | 	at java.base/ | ||
| + | Caused by: java.util.concurrent.ExecutionException: | ||
| + | 	at java.base/ | ||
| + | 	at java.base/ | ||
| + | 	at MyClass$SecuredFutureTask.done(MyClass.java: | ||
| + | ... 6 more | ||
| + | Caused by: java.io.IOException: | ||
| + | 	at MyClass.lambda$main$0(MyClass.java: | ||
| + | 	at java.base/ | ||
| + | ... 3 more | ||
| + | </ | ||
| =====Accès concurrent===== | =====Accès concurrent===== | ||
| <code java> | <code java> | ||
| Ligne 143: | Ligne 204: | ||
| </ | </ | ||
| + | =====Debug===== | ||
| + | ====Nommage des threads==== | ||
| + | |||
| + | Par défaut, le nom d'un thread est '' | ||
| + | |||
| + | Dans le cas des threads, cela se fait directement depuis le constructeur. | ||
| + | |||
| + | <code java> | ||
| + | new Thread(() -> {}, "Nom du thread" | ||
| + | </ | ||
| + | |||
| + | Dans le cas de '' | ||
| + | |||
| + | <code java> | ||
| + | new FutureTask<> | ||
| + |   Thread.currentThread().setName(" | ||
| + | }); | ||
| + | </ | ||
lang/java/thread.1685536344.txt.gz · Dernière modification :  de root
                
                