37 lines
1.8 KiB
Plaintext
37 lines
1.8 KiB
Plaintext
![]() |
== Why is this an issue?
|
||
|
|
||
|
The `Thread` class has some methods that are used to monitor and manage its execution.
|
||
|
With the introduction of virtual threads in Java 21, there are three of these methods that behave differently
|
||
|
between the standard platform threads and the virtual ones.
|
||
|
|
||
|
For virtual threads:
|
||
|
|
||
|
* `Thread.setDaemon(boolean)` will throw an `IllegalArgumentException` if `false` is passed as an argument as a virtual thread daemon status is always true.
|
||
|
* `Thread.setPriority(int priority)` will never change the actual priority of a virtual thread, which is always equal to `Thread.NORM_PRIORITY`
|
||
|
* `Thread.getThreadGroup()` will return a dummy "VirtualThreads" group that is empty and should not be used
|
||
|
|
||
|
This rule reports an issue when one of these methods is invoked on a virtual thread.
|
||
|
|
||
|
=== Code examples
|
||
|
|
||
|
==== Noncompliant code example
|
||
|
|
||
|
[source,java]
|
||
|
----
|
||
|
Thread t = Thread.ofVirtual().unstarted(()->{/* some task */});
|
||
|
t.setPriority(1); // Noncompliant; virtual threads' priority cannot be changed
|
||
|
t.setDaemon(false); // Noncompliant; will throw IllegalArgumentException
|
||
|
t.setDaemon(true); // Noncompliant; redundant
|
||
|
t.start();
|
||
|
var threadGroup = t.getThreadGroup(); // Noncompliant; virtual thread groups should not be used
|
||
|
----
|
||
|
|
||
|
== Resources
|
||
|
|
||
|
=== Documentation
|
||
|
|
||
|
* Java Documentation - https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/Thread.html#setDaemon(boolean)[Thread.setDaemon]
|
||
|
* Java Documentation - https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/Thread.html#setPriority(int)[Thread.setPriority]
|
||
|
* Java Documentation - https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/Thread.html#getThreadGroup()[Thread.getThreadGroup]
|
||
|
* Java Documentation - https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/ThreadGroup.html#virtualthreadgroup[Virtual threads group]
|