第一种:继承thread类,重写run()方法
一般方式:
Demo01.java
/** * 创建线程的第一种方式:继承thread类,重写run()方法 * * @author :liuqi * @date :2018-06-12 15:12. */ public class Demo01 { public static void main(String[] args) { Rabit r = new Rabit(); Tortoise t = new Tortoise(); // 调用start方法启动线程,不要调用run方法由内部自己调用 r.start(); t.start(); for (int i = 0; i < 5; i++) { System.out.println("main --> " + i); } } }
Rabit.java
/** * 兔子线程 * * @author :liuqi * @date :2018-06-12 15:14. */ public class Rabit extends Thread { @Override public void run() { for (int i = 0; i < 5; i++) { System.out.println("rabit run " + i); } } }
Tortoise.java
/** * 乌龟线程 * * @author :liuqi * @date :2018-06-12 15:17. */ public class Tortoise extends Thread { @Override public void run(){ for (int i = 0; i < 5; i++) { System.out.println("Tortoise run " + i); } } }
运行结果:
main --> 0
main --> 1
Tortoise run 0
Tortoise run 1
Tortoise run 2
Tortoise run 3
Tortoise run 4
main --> 2
rabit run 0
main --> 3
rabit run 1
rabit run 2
main --> 4
rabit run 3
rabit run 4
匿名内部类方式:
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(); ; } }
运行结果:
rabit run --0
rabit run --1
rabit run --2
rabit run --3
rabit run --4
tortoise run --0
tortoise run --1
tortoise run --2
tortoise run --3
tortoise run --4
lamda方式:
new Thread(() -> { for(int a=0; a>5; a++){ System.out.println(Thread.currentThread().getName() + ", a=" + a); }}, "thread 1").start();
参考:https://www.cnblogs.com/fuck1/p/5373700.html
代码地址:https://github.com/yuki9467/TST-javademo/tree/master/src/main/thread