题目描述
请问下面两种创建多线程的方法的区别与联系?
相关代码
TicketsThread ticketsThread = new TicketsThread();
new Thread(ticketsThread, "苦逼的你").start();
new Thread(ticketsThread, "牛逼的我").start();
new Thread(ticketsThread, "可恶的黄牛党").start();
和
TicketsThread ticketsThread1 = new TicketsThread();
TicketsThread ticketsThread2 = new TicketsThread();
TicketsThread ticketsThread3= new TicketsThread();
new Thread(ticketsThread1, "苦逼的你").start();
new Thread(ticketsThread2, "牛逼的我").start();
new Thread(ticketsThread3, "可恶的黄牛党").start();
//TicketsThread类代码:
class TicketsThread implements Runnable {
//加static 或者不加
static int a = 1;
@Override
public void run() {
for (int i = 0; i <10; i++) {
System.out.println(a++);
}
}
}
你这两种写法有没有区别取决于你的
TicketsThread
是怎么写的。上面的源码是
Thread
其中一个构造函数,这个构造函数的目标是获取Runnable
的run
方法来运行。如果你的
TicketsThread
也就是Runnable
中有成员变量,并且run
方法中使用了,那么可能会有影响,比如下面的代码:你的两种写法,在这个会出现不一致的结果。
如果你的成员变量是静态的,两次运行的结果就基本是一致的: