Java多线程基础讲解(一)

目录

前言

一、什么是多线程?

二、多线程的快速入门

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

                1.继承Tread类

                2.实现Runnable接口

                3.实现Callable接口

四、多线程的常用方法




前言

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




一、多线程是什么?

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

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



二、多线程的快速入门



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.步骤讲解

  1. 首先新建一个类,并继承Thread
  2. 重写run方法,在run方法里写线程的功能代码
  3. 在主类中创建对象
  4. 调用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()线程启动方法

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值