目录

前言

一、什么是多线程?

二、多线程的快速入门

三、多线程的三种创建方式

                1.继承Tread类

                2.实现Runnable接口

                3.实现Callable接口

四、多线程的常用方法


前言

        本文讲解了多线程的基础知识,针对java入门级别的读者,帮助其快速掌握并运用多线程。基础介绍帮助你快速了解多线程,快速入门帮你快速运用,处理较基础的问题,后面的篇章帮助你解决一些各种业务场景的需求,之后多线程的基础讲解系列二涉及了安全,同步,通信,线程池等知识。


一、多线程是什么?

java 多线程入库不写入数据 java多线程深入_Test

在这里,文件的上传和下载是同时进行的,不同的文件下载是同时进行的,这就是多线程。

每个任务(无论相同还是不同)同时由一个进程进行处理就是多线程。 

二、多线程的快速入门

1.代码示例

代码如下(示例):

public class Test {
    public static void main(String[] args) {
        MyTread myTread = new MyTread();//创建MyTread的对象
        myTread.start();//调用start的方法
    }
}
class MyTread extends Thread{
    //重写run方法
    @Override
    public void run() {
        //线程的功能代码
        System.out.println("hello");
    }
}

2.步骤讲解

首先新建一个类,并继承Thread重写run方法,在run方法里写线程的功能代码在主类中创建对象

  1. 调用start方法

3.注意事项

  1. 新建的线程必须在mian方法的相应代码前。否则主线程代码跑完在跑新线程,无意义,等于一个线程跑。
  2. 主方法中必须调用start方法而不是run,调用run方法会跑实例方法,而不是开启一共线程跑run方法。

三、多线程的三种创建方式

三种方法的比较

方式

优点

缺点

继承Tread类

简单

无法继承其他类,无返回值

实现Runnable接口

简单,可以继承其他类

无返回值

实现Callable接口

可以继承,有返回值

代码较复杂

    1.继承Tread类

public class Test {
    public static void main(String[] args) {
        MyTread myTread = new MyTread();//创建MyTread的对象
        myTread.start();//调用start的方法
    }
}
class MyTread extends Thread{
    //重写run方法
    @Override
    public void run() {
        //线程的功能代码
        System.out.println("hello");
    }
}

    2.实现Runnable接口

1.第一种直接新建类实现Runnable的接口

public class Test {
    public static void main(String[] args) {
        Runnable runnable = new MyTread();//创建Runnacle的实例对象
        new Thread(runnable).start();//把任务对象传给Thread,调用start的方法
        //主线程功能代码
        System.out.println("main");
    }
}
//新建类实现Runnable接口
class MyTread implements Runnable{
    //重写run方法
    @Override
    public void run() {
        //线程的功能代码
        System.out.println("hello");
    }
}

2.第二种使用匿名内部类方法(强烈推荐)

public class Test {
    public static void main(String[] args) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                //这里写子线程的功能代码
                System.out.println("我是子线程");
            }
        }).start();//调用start的方法
        //主线程功能代码
        System.out.println("main");
    }
}

3.匿名内部类可以简化

public class Test {
    public static void main(String[] args) {
        new Thread(()->
                
                //这里写子线程的功能代码
                System.out.println("我是子线程")
        
        ).start();//调用start的方法
        //主线程功能代码
        System.out.println("main");
    }
}

    3.实现Callable接口

public class Test {
    public static void main(String[] args) throws Exception {
        FutureTask futureTask = new FutureTask(new MyTread());//创建一个Callable的实现类对象,通过FutureTask将该类封装成任务对象(实现Runnable)
        new Thread(futureTask).start();//将任务对象交给线程对象,调用start的方法
        //主线程功能代码
        System.out.println("main");
        //调用子线程返回值
        System.out.println(futureTask.get());//返回值使用FutureTask的get方法得到
    }
}
//新建类实现Callable接口 ,定义泛型,这里定义的是String
class MyTread implements Callable<String> {
    @Override
    public String call() throws Exception {
        //功能代码
        return "我是子线程";//返回相应类型值
    }
}

 四、多线程的常用方法 (基础)

方法

作用

String getName()

获取当前线程的名称,默认线程名称是Thread-索引

void setName(String name)

设置线程名称

public static Thread currentThread()

返回对当前正在执行的线程对象的引用

public static void sleep(long time)

让线程休眠指定的时间,单位为毫秒。

public void start()

线程启动方法