Bootstrap

[java基础] 多线程-线程的创建(一)

1、进程、线程、多线程概念

进程,每一个应用程序(类/模板)的实例是一个进程,每一个进程都是由多条线程构成的(可以让多个任务并行,效率高),如果只要一条线程,所有的任务只能按顺序执行(效率低)。线程是操作系统能够进行运算调度的最小单位,它比进程更小,是进程中的一个实体。多个线程可以在同一个进程中并发执行,共享进程的资源(如内存地址空间、文件描述符等),但每个线程拥有独立的栈空间和程序计数器。

2、线程的特点

(1)线程是CPU调度执行最基本的单位。(2)CPU再所有线程之间的切换是随机的(对java是随机,即使能设置优先级)。(3)默认情况下,线程与线程之间的执行是互不影响(除非手动干预,比如线程同步技术)。

3、创建线程的方式

3.1 继承Thread类

(1)创建一个类继承Thread类。(2)重写run()方法,将线程要执行的代码放在run()方法中。
(3)创建该类的实例,并调用start()方法启动线程。

public class Thread01 extends Thread{

    private int num;

    public Thread01(int num) {
        this.num = num;
    }

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

    @Override
    public void run() {
        System.out.println("继承Thread线程正在运行,正在运行:"+num);
    }

}

3.2 实现Runnable接口

(1)创建一个类实现Runnable接口。(2)实现run()方法,将线程要执行的代码放在run()方法中。(3)创建Thread类的实例,并将实现了Runnable接口的类的实例作为参数传递给Thread类的构造函数。(4)调用Thread类的start()方法启动线程。

public class Thread02 implements Runnable{
    @Override
    public void run() {
        System.out.println("实现Runnable线程正在运行");
    }
}

3.3 实现Callable接口

(1)创建一个类实现Callable接口。(2)重写call方法。(3)创建目标对象(4)创建执行服务(5)提交执行(6)获取结果 (7)关闭服务

import java.util.concurrent.Callable;

public class Thread03 implements Callable<Integer> {

    private int num;


    public Thread03(int num) {
        this.num = num;
    }

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

    @Override
    public Integer call() throws Exception {
        System.out.println(num);
        return 1;
    }
}
import java.util.concurrent.*;

public class Client {

    public static void main(String[] args) throws ExecutionException, InterruptedException {
        //(1) 继承 Thread
        Thread01 thread01 = new Thread01(1);
        Thread01 thread011 = new Thread01(2);
        thread01.start();
        thread011.start();

        //(2)实现 Runnable
        Thread02 thread02 = new Thread02();
        Thread thread = new Thread(thread02);
        thread.start();

        //(3) 实现Callable
        //创建执行服务
        ExecutorService executorService = Executors.newFixedThreadPool(1);
        Thread03 thread03 = new Thread03(1);
        Thread03 thread031 = new Thread03(2);
        Thread03 thread032 = new Thread03(3);
        //提交执行
        Future<Integer> submit = executorService.submit(thread03);
        Future<Integer> submit1 = executorService.submit(thread031);
        Future<Integer> submit2 = executorService.submit(thread032);

        //获取结果
        Integer integer1 = submit1.get();
        Integer integer2 = submit1.get();
        Integer integer3 = submit1.get();
        //关闭服务
        executorService.shutdown();



    }
}

;