Java多线程基础讲解(一)

Java多线程基础讲解(一),第1张

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 {
    @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()线程启动方法

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5676474.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存