上一篇全部是多线程的基础理解,理解完之后,继续回到JAVA里面,实现多线程
JAVA多线程的类:Thread
先看看thread
从上面可以看出,有两种创建多线程的方法:
- 继承Thread,重写run方法
- 实现Runnable,重写ruN方法
继承Thread
public class Main extends Thread {
@Override
public void run() {
for (int i = 0; i < 200; i++) {
System.out.println("多多多多敲代码");
}
}
public static void main(String[] args) {
Main test = new Main();
test.run();
for (int i = 0; i < 2000; i++) {
System.out.println("i = " + i);
}
}
}
//输出结果,先输出完200多多多多敲代码,再到2000次i
部分展示:
多多多多敲代码
多多多多敲代码
多多多多敲代码
多多多多敲代码
i = 0
i = 1
i = 2
i = 3
i = 4
而.start的话交替执行,循环次数多效果才明显
public class Main extends Thread {
@Override
public void run() {
for (int i = 0; i < 200; i++) {
System.out.println("多多多多敲代码");
}
}
public static void main(String[] args) {
Main test = new Main();
test.start();
for (int i = 0; i < 2000; i++) {
System.out.println("i = " + i);
}
}
}
//输出结果,交替执行
部分展示:
多多多多敲代码
多多多多敲代码
多多多多敲代码
i = 1
多多多多敲代码
多多多多敲代码
多多多多敲代码
实现Runnable接口
public class TestThread implements Runnable{
@Override
public void run() {
for (int i = 0; i < 20; i++) {
System.out.println("多多多多敲代码");
}
}
public static void main(String[] args) {
TestThread testThread = new TestThread();
//通过线程对象来开启我们的线程,代理
//new Thread(testThread).run();
new Thread(testThread).start();
for (int i = 0; i < 2000; i++) {
System.out.println("i = " + i);
}
}
}
运行结果与上面一致,不做过多的描述
故此可得到下图
那上面两个实现方式有什么区别呢?
-
继承Thread类
①子类继承Thread类具备多线程能力
②启动方式:子类.start()
③不建议:单继承局限性 -
实现Runnable接口
①实现Runnable具备多线程能力
②启动方式:传入目标对象+Thread对象.start()
③建议:灵活方便,避免了单继承局限性
文章大部分内容是个人整理,参考引用java3y的文章