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 : 2023/05/31 14:32 de root