美文网首页
高并发(2)- 多线程的创建

高并发(2)- 多线程的创建

作者: 残冬十九 | 来源:发表于2020-03-27 16:49 被阅读0次

    前言

    上篇文章讲解了并发与并行的区别,那么从本篇文章开始就要着重描写线程了。

    本篇文章就为大家带来最近本的线程创建方法。


    一、线程的创建

    JDK官方规定,线程(Thread)的创建有两种方式,继承Thread类,实现Runnable接口。所以今天来就是来看这两种线程创建的区别。

    1. 继承Thread接口

      我们直接上代码

    /**
     * @version 1.0
     * @Description 用户继承Thread线程实现
     * @Author wb.yang
     * @Date 2020/3/15 22:29
     */
    public class UserThread extends Thread {
    
        @Override
        public void run() {
            //重写Thread的run方法,我们的逻辑实现
            System.out.println("this is userThread");
        }
    }
    

    从代码中可以看出,我们的UserThread类继承了Thread类,并重写了run方法,并在方法中写入了我们的逻辑。接下来上我们的测试类代码

    /**
     * @version 1.0
     * @Description 用户线程测试代码
     * @Author wb.yang
     * @Date 2020/3/15 22:33
     */
    public class UserThreadTest {
    
        public static void main(String[] args) {
            //创建UserThread的对象
            UserThread userThread = new UserThread();
            //调用Thread的start方法,启动线程
            userThread.start();
        }
    }
    
    image.gif

    我们已经写好了UserThread的测试代码。从代码中可以看出,我们先创建了UserThread的对象,因为UserThread继承了Thread,所以UserThread也便是一个线程类了,可以直接调用start方法来调用线程。

    image image.gif

    ​​

    从截图中可以看出,UserThread中的run方法已经执行,并且打印出数据。
    

    这便是第一种线程创建的方法,继承Thread。

    2.实现Runnable接口

    同样直接上代码

    /**
     * @version 1.0
     * @Description 用户实现Runnable接口实现
     * @Author wb.yang
     * @Date 2020/3/16 21:48
     */
    public class UserRunnable implements Runnable {
    
        public void run() {
            //重写Run方法执行逻辑
            System.out.println("This Is UserRunnable");
        }
    }
    
    
    image.gif

    从代码中可以看出,我们的UserRunnable类实现了Runnable接口,并重写了run方法,在方法中写入了我们的逻辑。

    /**
     * @version 1.0
     * @Description 用户线程测试代码
     * @Author wb.yang
     * @Date 2020/3/15 22:33
     */
    public class UserThreadTest {
    
        public static void main(String[] args) {
            /*//创建UserThread的对象
            UserThread userThread = new UserThread();
            //调用Thread的start方法,启动线程
            userThread.start();*/
    
            // 创建UserRunnable的对象
            UserRunnable userRunnable = new UserRunnable();
            //由于实现了Runnable,还不是线程,所以需要new一个Thread,然后传入其中,执行
            new Thread(userRunnable).start();
        }
    }
    
    

    这是我们写好的UserRunnable的测试代码。我们依旧先创建了UserRunnable的对象,但是由于UserRunnable只是实现了Runnable接口,UserRunnable本身还不是一个线程,所以需要new出一个Thread,然后将UserRunnable放入其中,这时候便在线程之中了,然后调用线程额start()方法启动线程。

    image image.gif

    ​​

    这是我们运行代码的截图,从中可以看出UserRunnable也已经成功执行了。

    这边是线程的第二种创建方法,实现Runnable接口。

    二、两种创建的区别

    既然是两种线程的创建方法,那肯定是有区别的,那就来讲讲其中的区别把。

    1.java中的单继承多实现的,所以如果继承了Thread类的话就不能在继承其他类,而接口是多实现的,在实现了Runnable接口的情况下,不妨碍继续实现其他接口。这个区别再具体的业务场景中需要灵活使用。

    2.Thread是对线程的抽象,也就是继承了Thread的话本身也就是一个线程类,可以直接执行,而Runnable是对任务的抽象,本身只是一个普通的类,并不是一个线程,所以还需要额外的创建一个线程来执行实现Runnable接口的任务,这也是在前面代码中所写出的那样。

    两种方法没有说那种特别好,实用的话还是根据具体的业务场景来使用。

    额外提一句,线程只能执行一次,执行第二次便会报错。

    image image.gif

    相关文章

      网友评论

          本文标题:高并发(2)- 多线程的创建

          本文链接:https://www.haomeiwen.com/subject/tpzluhtx.html