在上一篇中我们了解到Controller和Service中使用全局变量会导致线程安全问题,那么线程是怎么创建出来的呢?

1. 线程的两种实现方式

  • 继承Thread类
//继承Thread类
    static class MyThread1 extends Thread{
        @Override
        public void run() {
            System.out.println("继承Thread实现自己的线程");
        }
    }
  • 实现Runnable接口
//实现Runnable接口
    static class MyThread2 implements Runnable{
        @Override
        public void run() {
            System.out.println("实现Runnable接口实现自己的线程");
        }
    }

2.线程的启动

public static void main(String[] args) {
        //1.通过继承Thread创建自己的线程并且启动
        new MyThread1().start();

        //2.通过实现Runnable,创建自己的线程并且启动
        new Thread(new MyThread2()).start();

        //3.通过匿名内部类创建线程
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("匿名内部类实现的线程");
            }
        }).start();

        //4.lambda表达式创建线程
        new Thread(()->{
            System.out.println("通过");
        }).start();

    }

注意 不管用哪种方式实现自己的线程,最终要启动线程必须得通过Thread.start()方法启动,start()方法会把线程交给CPU去调度执行,只有当CPU调度到线程把时间片分配给它,线程才会执行。


guojing
7 声望0 粉丝