并发编程[1]_线程的创建


介绍线程创建的两种基本的方法:继承Thread类和实现Runnable接口

1. 继承Thread类

  • 自定义类继承Thread类,重写 run() 方法
import org.slf4j.LoggerFactory;

/**
 * @author: yt
 * @date: 2021/4/12  22:09
 * @description: 创建Thread类继承Thread
 */
public class MyThread extends Thread{
    private static final Logger log = LoggerFactory.getLogger(MyThread.class);
    
    MyThread(String name){
        super(name);
    }

    @Override
    public void run() {
        log.debug("thread running...");
    }
}
public class Test1 {
    private static final Logger log = LoggerFactory.getLogger(Test1.class);

    public static void main(String[] args) {
        // myThread 是线程名称
        MyThread myThread = new MyThread("myThread");
        // 调用start方法启动线程,程序会执行run()方法
        myThread.start();
    }
}

或者直接用匿名内部类实现

public class Test1 {
    private static final Logger log = LoggerFactory.getLogger(Test1.class);

    public static void main(String[] args) {
        Thread myThread = new Thread("myThread") {
            @Override
            public void run() {
                log.debug("thread running...");
            }
        };
        myThread.start();
    }
}

调用start() 方法启动线程,线程启动后会执行run()方法。

运行结果:

2021-04-12 22:26:27  [myThread] - thread running...

2.实现Runnable接口

实现Runnable接口,重写run()方法,然后将Runnable实例丢给Thread类实例化,即可新建一个新的线程,一样是调用线程对象的start()的方法来启动线程。
java8 以后可以使用Lambda 表达式来 创建Runnable实例

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @author: yt
 * @date: 2021/4/12  22:01
 * @description:
 */
public class Test1 {
    private static final Logger log = LoggerFactory.getLogger(Test1.class);

    public static void main(String[] args) {
        // 方法一:使用匿名内部类实现接口
        Runnable runnable1 = new Runnable() {
            @Override
            public void run() {
                log.debug("runnable1 running...");
            }
        };
        // Thread实例化,第一个参数为Runnable,第二个参数为线程名称
        Thread thread1 = new Thread(runnable1,"runnable1");
        // 启动线程
        thread1.start();

        // 方法二:使用Lambda表达式实现接口
        Runnable runnable2 = ()->{log.debug("runnable2 running...");};
        Thread thread2 = new Thread(runnable2,"runnable2");
        thread2.start();

        log.debug("main 方法");
    }
}

运行结果:

2021-04-12 22:36:32  [runnable1] - runnable1 running...
2021-04-12 22:36:32  [main] - main 方法
2021-04-12 22:36:32  [runnable2] - runnable2 running...
posted @ 2024-08-23 10:39  Aeons  阅读(2)  评论(0编辑  收藏  举报