java-多线程,Thread类,Runnable接口,匿名内部类实现线程创建

多线程

并发:指多个事件在同一时间段内发生
并行:是指多个时间在同一时刻方法
在这里插入图片描述

线程的调度

在这里插入图片描述

创建线程类

使用场景:

我们要是想要实现多线程程序,就必须创建一个继承Thread类的子类

实现步骤:

1.创建一个Thread类的子类
2.在Thread类的子类中重写Thread类中的run方法,设置线程任务(开启线程后要做什么)
3.创建Thread类的子类对象
4.调用Tread类中的方法start方法,开始新的线程,执行run方法
创建一个子类MyThread重写run方法

public class MyThread extends Thread{
    @Override
    public void run() {
        for (int i = 0; i < 20; i++) {
            System.out.println("run"+i);
        }
    }
}

主程序

public class t1 {
    public static void main(String[] args) throws RegisterException {
        MyThread mt = new MyThread();
        mt.start();

        for (int i = 0; i < 20; i++) {
            System.out.println("main"+i);
        }
    }
}

Thread类中的常用方法

在这里插入图片描述

创建一个继承Thread类的子类

public class MyThread extends Thread{
    @Override
    public void run() {
        //获取线程名称
        String name = getName();
        System.out.println(name);
    }
}

主程序

public class t1 {
    public static void main(String[] args){
        MyThread mt = new MyThread();
        mt.start();//Thread-0

        new MyThread().start();//Thread-1

        System.out.println(Thread.currentThread().getName());//main

    }

}

Thread类的sleep方法

public class t1 {
    public static void main(String[] args){
       //模拟秒表
        for (int i = 0; i < 60; i++) {
            System.out.println(i);
            try {
                Thread.sleep(1000);//毫秒
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

    }

}

创建多线程的第二种方式:实现Runnable接口

实现步骤:

1.创建一个Runnable接口的实现类
2.在实现类中重写Runnable接口的run方法,设置线程任务
3.创建一个Runnable接口的实现类对象
4.创建Thread类对象,构造方法中传递Runnable接口的实现类对象
5.调用Thread类中的start方法,开启新的线程执行run方法

创建Runnable接口的实现类RunnableImple

public class RunnableImple implements Runnable {
    @Override
    public void run() {
        for (int i = 0; i < 20; i++) {
            System.out.println(Thread.currentThread().getName()+i);
        }
    }
}

主程序

public class t1 {
    public static void main(String[] args){
        RunnableImple rn = new RunnableImple();
        Thread th = new Thread(rn);
        th.start();

        for (int i = 0; i < 20; i++) {
            System.out.println(Thread.currentThread().getName()+i);
        }
    }
}

Thread和Runnable的区别

实现Runnable接口创建多线程的好处:

1.避免了单继承的局限性

匿名内部类方式实现线程的创建

匿名:没有名字
内部类:写在其他类的内部的类

使用场景:

把子类继承父类,重写父类的方法,创建子类对象合一步完成
或者是把实现类现实接口,重写接口中的方法,已经创建实现类对象合成一步完成

public class t1 {
    public static void main(String[] args){
        //匿名内部类实现继承
        new Thread(){
            //重写run方法,设置线程任务

            @Override
            public void run() {
                for (int i = 0; i < 20; i++) {
                    System.out.println(Thread.currentThread().getName()+i);
                }
            }
        }.start();
    //匿名内部类实现接口
        Runnable r = new Runnable(){
            @Override
            public void run() {
                for (int i = 0; i < 20; i++) {
                    System.out.println(Thread.currentThread().getName()+i);
                }
            }
        };
        new Thread(r).start();
        //简化接口的方式
        new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i < 20; i++) {
                    System.out.println(Thread.currentThread().getName());
                }
            }
        });
    }

}

发布了33 篇原创文章 · 获赞 9 · 访问量 3865

猜你喜欢

转载自blog.csdn.net/weixin_45154559/article/details/105237653