java 创建线程的几种方式

198 阅读1分钟

线程与进程

进程是资源分配的最小单位,线程是CPU调度的最小单位

  • 线程在进程下行进
  • 一个进程可以包含多个线程
  • 不同进程间数据很难共享
  • 同一进程下不同线程间数据很易共享

线程的创建方式

继承Thread类方式

1.定义一个类继承Thread类,重写run方法,run里面是线程开启后会执行的代码

public class MyThread extends Thread {
    @Override
    public void run() {
        System.out.println("我是继承Thread类方式");
    }
}

2.通过调用Thread类中的start方法,开启一个新的线程

注意:直接调用run方法和start的区别?

  • 可以直接调用run方法,但是没有启动一个独立的线程;
  • 调用start方法会开启一个独立的新线程,并调用run方法;
public static void main(String[] args) {
    System.out.println("111111");
    MyThread t1 = new MyThread();
    t1.start();
    System.out.println("22222");
}

结果:可以明显看到,main方法中打印语句执行完才执行的线程t1的run方法,说明是两个不同的线程

image.png


实现Runnable接口方式

1.定义一个自定义类,该类实现Runnable接口,并重写run方法

public class MyThread2 implements Runnable{
    @Override
    public void run() {
        System.out.println("我是实现Runnable接口的类。。。");
    }
}

2.调用Thread类Thread(Runnable target)方法,创建Thread类对象

public static void main(String[] args) {
    System.out.println("111111");
    Thread t2 = new Thread(new MyThread2());
    t2.start();
    System.out.println("22222");
}

结果:

image.png


若该线程一次性使用,还可通过匿名内部类方式

public static void main(String[] args) {
    System.out.println("111111");
    Thread t3 = new Thread(new Runnable() {
        @Override
        public void run() {
            System.out.println("我是匿名内部类方式");
        }
    });
    t3.start();
    System.out.println("22222");
}

结果:也是同样的效果

image.png