**
开发中:优先选择:实现Runnable 接口的方式
**
原因:
1.实现的方式没有类的单继承性的局限性
2.实现的方式更适合来处理多个线程有共享数据的情况。
//1、创建一个实现了Runnable接口的类
class MyThreadTest implements Runnable {
//2、实现类去实现Runnable中的抽象方法:run()
@Override
public void run() {
for (int i = 0; i < 100; i++) {
if (i % 2 == 0) {
System.out.println(Thread.currentThread().getName() + ":" + i);
}
}
}
}
public class ThreadTest2 {
public static void main(String[] args) {
//3、创建实现类的对象
MyThreadTest threadTest = new MyThreadTest();
//4、将此对象作为参数传递到Thread类的构造器中,创建Thread类的对象
Thread thread = new Thread(threadTest);
// 5、通过Thread类的对象调用start()
thread.setName("线程一:");
thread.start();
//在启动一个线程,遍历100以内的偶数+“我爱学编程”
Thread thread1 = new Thread(threadTest);
thread1.setName("线程二:");
thread1.start();
}
}
多个线程可以共享一个new MyThreadTest();
比较创建线程的两种方式,一种方法是将类声明为 Thread 的子类。该子类应重写 Thread 类的 run 方法。接下来可以分配并启动该子类的实例。例如,计算大于某一规定值的质数的线程可以写成:
class PrimeThread extends Thread {
long minPrime;
PrimeThread(long minPrime) {
this.minPrime = minPrime;
}
public void run() {
// compute primes larger than minPrime
. . .
}
}
然后,下列代码会创建并启动一个线程:
PrimeThread p = new PrimeThread(143);
p.start();
创建线程的另一种方法是声明实现 Runnable 接口的类。该类然后实现 run 方法。然后可以分配该类的实例,在创建 Thread 时作为一个参数来传递并启动。采用这种风格的同一个例子如下所示:
class PrimeRun implements Runnable {
long minPrime;
PrimeRun(long minPrime) {
this.minPrime = minPrime;
}
public void run() {
// compute primes larger than minPrime
. . .
}
}
然后,下列代码会创建并启动一个线程:
PrimeRun p = new PrimeRun(143);
new Thread(p).start();
每个线程都有一个标识名,多个线程可以同名。如果线程创建时没有指定标识名,就会为其生成一个新名称