让我们把所有的东西放在他们的位置。 声明new Thread(r)
创建线程。但是这个线程仍然不能运行。如果说”
Thread t = new Thread(r);
t.start();
你做的线程来运行,即执行你可运行的run()
方法。
其他(等于)的方式来创建和运行的线程是从Thread类,并覆盖默认实现继承其run()
方法。
现在,如果你有特定的逻辑,你希望在不同的线程同时运行相同的逻辑,你必须创建不同的线程,如果您希望实现Runnable接口的执行其start()方法。 和你的逻辑不需要重新创建任何参数,甚至可以只创建可运行实现的一个实例并将其运行到不同的线程中。
public class MyLogic implements Runnable {
public void run() {
// do something.
}
}
//// ................
Runnable r = new MyLogic();
Thread t1 = new Thread(r);
Thread t2 = new Thread(r);
t1.start();
t2.start();
现在这个逻辑在2个独立的线程中运行simultaniusly,而我们只创建了MyLogic的一个实例。
如果你的逻辑需要参数,你应该创建单独的实例。
public class MyLogic implements Runnable {
private int p;
public MyLogic(int p) {
this.p = p;
}
public void run() {
// this logic uses value of p.
}
}
//// ................
Thread t1 = new Thread(new MyLogic(111));
Thread t2 = new Thread(new MyLogic(222));
t1.start();
t2.start();
这2个线程运行相同的逻辑与不同的参数(111和222)。
顺便说一句,这个例子展示了如何将值传递给线程。要从中获取信息,您应该使用类似的方法。定义成员变量result
。该变量将通过方法run()
启动。提供适当的吸气剂。现在,您可以将线程结果传递给任何有兴趣执行此操作的人。
上面明显描述的是基础知识。我没有提及任何有关同步,线程池,执行程序等的内容,但我希望这会帮助你开始。然后找到一些Java线程教程,并通过它。几天后,您将成为java线程的世界级专家。 :)
快乐线程。
我如何在一个实例变量中共享这个,如果每个实例都有它自己的变量? – 2011-07-18 17:25:36
这将是一个线程外的对象,但它们之间共享,就像你在你的问题中提出的那样。每个线程都具有与该对象相同的引用,并且该对象具有在线程之间进行协调所需的变量。 – DNA 2011-08-01 10:56:33