你如何检查哪个线程在Java中执行代码?

Nil*_*ils 14 java concurrency multithreading assert

我有一个多线程Java程序,其中包含一些围绕线程的规则:例如,A类中的代码只能从UI线程调用; 必须仅从网络线程等调用B类中的3个方法.

关于如何进行断言或其他代码检查的任何建议都遵循这些规则?我想做相当于"不变量"的测试,以防止线程使用上的编码错误.

ada*_*isk 16

Thread.currentThread().的getName()


rob*_*x44 13

除了adamfisk的优秀建议之外,还有一种方便的方法来专门测试当前线程是否是EDT线程:

EventQueue.isDispatchThread()
Run Code Online (Sandbox Code Playgroud)


Pet*_*rey 8

你可以试试

assert Thread.currentThread() == expectedThread;
Run Code Online (Sandbox Code Playgroud)

使用该名称的问题是任何数量的线程都可以使用该名称,例如,如果您特别偏执,您可能会担心这样的代码.

Thread.t = Thread.currentThread();
String name = t.getName();
t.setName("UI thread");
callUIThreadOnlyMethod();
t.setName(name);
Run Code Online (Sandbox Code Playgroud)