如果我创建一个可运行的对象
Runnable run = new MyRunnable();
然后将相同的对象传递给两个线程构造函数并运行它们
new Thread(run).start; new Thread(run).start;
这绝对是可能和合法的。如果您Runnable没有状态(没有字段),那么一切都会好起来的。如果Runnable确实具有可变状态,则可能需要使用Java的许多 互斥机制之一, 例如ReentrantLock或synchronized关键字。因为两个线程都将使同一Runnable对象的字段发生变化。
Runnable
ReentrantLock
synchronized
不,您创建并运行了两个不同的线程。他们只是打电话Runnable.run()。
Runnable.run()
这并非超出可能性范围。我什至不会说这一定是坏习惯。您可能会做的特定情况留给读者作为练习…