继承Thread类和实现Runnable接口是是实现多线程的两个方法
Thread方法具有局限性,及继承的局限性,单继承。
一个类只要继承了Thread类同时覆写了本类中的run()方法就可以实现多线程操作
Thread类也是Runnable接口的子类
Runnable接口经常被使用,优点就是可以多实现,适合共享资源,Thread独立性较差,且只能是单继承
package com.cm;
public class Test7 {
public static void main(String[] args) {
MyThread mt1 = new MyThread("线程a");
mt1.run();
}
}
class MyThread extends Thread {
private String name;
public MyThread(String name) {
super();
this.name = name;
}
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println("线程开始:" + this.name + ",i=" + i);
}
}
}
使用start()方法可是线程交互
package com.cm;
public class Test7 {
public static void main(String[] args) {
MyThread mt1 = new MyThread("线程a");
MyThread mt2 = new MyThread("线程b");
mt1.start();
mt2.start();
}
}
class MyThread extends Thread {
private String name;
public MyThread(String name) {
super();
this.name = name;
}
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println("线程开始:" + this.name + ",i=" + i);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
}
而Runnable接口经常被使用,优点就是可以多实现,适合共享资源
package com.cm;
public class Test8 {
public static void main(String[] args) {
MyThread2 t = new MyThread2();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
}
}
class MyThread2 implements Runnable {
private int k = 10;
public void run() {
for (int i = 0; i < 20; i++) {
if (this.k > 0) {
System.out.println("k=" + this.k--);
}
}
}
}
这样的k是不会重复的,因为太占有的是同一个k的资源,而使用Thread而不行。‘他们的线程相互独立运行。