假设我们有这两个 Runnable:
class R1 implements Runnable { public void run() { … } … } class R2 implements Runnable { public void run() { … } … }
那么这之间有什么区别:
public static void main() { R1 r1 = new R1(); R2 r2 = new R2(); r1.run(); r2.run(); }
还有这个:
public static void main() { R1 r1 = new R1(); R2 r2 = new R2(); Thread t1 = new Thread(r1); Thread t2 = new Thread(r2); t1.start(); t2.start(); }
第一个例子: 没有多个线程。两者都在单个(现有)线程中执行。没有线程创建。
R1 r1 = new R1(); R2 r2 = new R2();
r1并且r2只是实现Runnable接口并因此实现run()方法的类的两个不同对象。当您调用时,r1.run()您正在当前线程中执行它。
r1
r2
Runnable
run()
r1.run()
第二个例子: 两个单独的线程。
Thread t1 = new Thread(r1); Thread t2 = new Thread(r2);
t1并且t2是类的对象Thread。当您调用 时t1.start(),它会启动一个新线程并在内部调用 的run()方法以在该新线程中执行它。r1
t1
t2
Thread
t1.start()