创建线程的一般方式和匿名内部类方式对比——实现runnable接口,重新run方法

时间:2021-08-27 17:23:20

启动:使用静态代理设计模式

优点:可同时实现继承,避免单继承局限性

一般方式:

Programer.java
/**
* 真实角色
*
* @author :liuqi
* @date :2018-06-12 17:39.
*/
public class Programer implements Runnable {
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println("一边coding: ");
}
}
}
测试类
Demo03.java
/**
* 测试类:一般方式之实现runnable接口创建线程
*
* @author :liuqi
* @date :2018-06-12 17:44.
*/
public class Demo03 {
public static void main(String[] args) {
// 创建真实角色
Programer pro = new Programer();
// 创建代理角色+真实角色引用
Thread proxy = new Thread(pro);
// 调用start方法启动线程
proxy.start();
for (int i = 0; i < 7; i++) {
System.out.println("一边聊QQ");
}
}
}

运行结果:

一边聊QQ
一边聊QQ
一边聊QQ
一边聊QQ
一边聊QQ
一边聊QQ
一边聊QQ
一边coding:
一边coding:
一边coding:
一边coding:
一边coding:

匿名内部类方式:

ThreadDemo.java
/**
* 使用匿名内部类的方式创建线程
*
* @author :liuqi
* @date :2018-06-12 15:02.
*/
public class ThreadDemo {
// 继承thread类实现多线程
public static void main(String[] args) {
/*new Thread() {
@Override
public void run() {
for (int x = 0; x < 5; x++) {
*//*System.out.println(Thread.currentThread().getName() + "--"
+ x);*//*
System.out.println("rabit run " + "--"
+ x);
}
}
}.start();
;
new Thread() {
@Override
public void run() {
for (int x = 0; x < 5; x++) {
*//*System.out.println(Thread.currentThread().getName() + "--"
+ x);*//*
System.out.println("tortoise run " + "--"
+ x);
}
}
}.start();
;*/
// 实现runnable接口,创建多线程并启动
new Thread(new Runnable() {
@Override
public void run() {
for (int x = 0; x < 5; x++) {
System.out.println(Thread.currentThread().getName() + "--"
+ x);
}
}
}) {
}.start();
}
}

运行结果:

Thread-0--0
Thread-0--1
Thread-0--2
Thread-0--3
Thread-0--4

参考:https://www.cnblogs.com/fuck1/p/5373700.html

代码地址:https://github.com/yuki9467/TST-javademo/tree/master/src/main/thread