方法一:继承Thread类
package cn.breeziness123.zhx;
/**
*
* 实现多线程的方法一:
* 继承Thread类,缺点至于java的单继承机制,会影响后面的类继承于其他类时的代码改动
* 优点在于创建线程简单
*/
public class ThreadDemo01 extends Thread {
public static void main(String[] args){
ThreadDemo01 th1 = new ThreadDemo01();
ThreadDemo01 th2 = new ThreadDemo01();
th1.start();
th2.start();
}
//必须重写run()方法,也称为线程体,在这个方法中进行需要在子线程中的操作
@Override
public void run() {
super.run();
for(int i = 0;i<10;i++){
System.out.println(this.getName());
}
}
}
方法二:实现Runnable接口,并使用Thread类代理
package cn.breeziness123.zhx;
/**
* 创建线程的方法二:实现Runnable
* 推荐使用这个方法,这个方法需要借助代理的Thread对象来启动线程(调用Start()方法)
* 可以使用lambda表达式简化代码
*/
public class ThreadDemo02 implements Runnable {
public static void main(String[] args){
//实现Runnable接口的称为实现者
ThreadDemo02 th1 = new ThreadDemo02();
ThreadDemo02 th2 = new ThreadDemo02();
//需要借助Thread对象才能调用start()方法,Thread对象在这里我们称为代理者,这里是典型的代理设计模式
new Thread(th1).start(); //这里的对象只使用一次,所以可以使用匿名内部实现
//也可以使用lambda表达式,简化内部类的写法,内部即为线程体的内容,实际是实现了run(),方法
new Thread(()->{
for (int i = 0 ;i<10;i++){
System.out.println(Thread.currentThread().getName()+"---->"+i);
}
}).start();
}
方法三:实现callable接口,属于JUC并发编程,基础这里没涉及