温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java中怎么使用Thread和Runnable创建线程

发布时间:2022-07-04 13:46:56 来源:亿速云 阅读:109 作者:iii 栏目:开发技术

这篇“Java中怎么使用Thread和Runnable创建线程”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java中怎么使用Thread和Runnable创建线程”文章吧。

    一、通过继承Thread创建线程

    通过继承Thread类,创建一个线程,在主线程中,调用start,让线程处于runnable状态,让系统去运行线程的方法。

    public class MyThread extends Thread {
        @Override
        public void run() {
            System.out.println("执行线程");
        }
    }
    public class ThreadTest {
    
        public static void main(String[] args) {
            Thread thread = new MyThread();
            thread.start();
        }
    }

    二、实现Runnable创建检查

    通过实现runnable接口,创建一个线程,需要把runnable的实现类,作为Thread的构造方法的参数,运行这个线程。

    public class MyThread implements Runnable {
        @Override
        public void run() {
            System.out.println("执行线程");
        }
    }
    
    public class ThreadTest {
        public static void main(String[] args) {
            Runnable thread = new MyThread();
            Thread thread1 = new Thread(thread);
            thread1.start();
    
        }
    }

    这里要注意一些,runnable的实现类,是没有start()方法的,只有run()方法

    Java中怎么使用Thread和Runnable创建线程

    如果运行这个run方法,依然能运行线程的方法,但是,这个方法并不是在新的线程中运行的,而是在主线程中运行的。

    public class MyThread implements Runnable {
        @Override
        public void run() {
            System.out.println("此方法在:"+Thread.currentThread().getName()+"中运行");
        }
    }
    
    
    public class ThreadTest {
    
        public static void main(String[] args) {
            Runnable run = new MyThread();
            System.out.println("此方法在:"+Thread.currentThread().getName()+"中执行");
            run.run();
    //        Thread thread1 = new Thread(run);
    //        thread1.start();
    
        }
    }

    运行结果:

    Java中怎么使用Thread和Runnable创建线程

    如果把注释打开,run()注释掉,结果如下:

    Java中怎么使用Thread和Runnable创建线程

    三、比较两种创建方式

    3.1、多继承

    Java是不支持类的多继承的,但是支持接口的多实现,所以Runnable在使用上更加灵活。

    3.2、 数据共享

    如果一个类继承Thread,则不适合资源共享。但是如果实现了Runable接口的话,则很容易的实现资源共享。
    如果线程中有一个成员变量,使用Runnable创建的线程,多个线程之间可以共同访问这个变量,而Thread不可以。

    Java中怎么使用Thread和Runnable创建线程

    为什么呢?一个Thread创建的线程,每次都是new的一个新的线程对象,线程对象之间的成员变量不共享。而Runnale,可以作为Thread类的参数,可以多创建几个Thread类,把Runnale作为参数,让多个线程一起运行。

    public class ThreadTest {
    
        public static void main(String[] args) {
            Runnable run = new MyThread();
            Thread thread1 = new Thread(run);
            Thread thread2 = new Thread(run);
            Thread thread3 = new Thread(run);
            thread1.start();
            thread2.start();
            thread3.start();
        }
    }

    3.3、线程池

    线程池只能放入实现Runable或callable类线程,不能直接放入继承Thread的类。

    Java中怎么使用Thread和Runnable创建线程

    四、源码分析

    当我们进入Thread方法,可以看的Thread也实现了Runnable接口

    Java中怎么使用Thread和Runnable创建线程

    使用Thread肯定也实现了他的run方法。

    Java中怎么使用Thread和Runnable创建线程

    可以看出,在这个run方法中,如果target不为空,执行target的run方法,那target是什么?

    Java中怎么使用Thread和Runnable创建线程

    进入后,发现是runnable接口,那它是如何初始化的?突然想起,执行runnable的实现类时,都会把他通过构造函数传递,那来看看构造函数。

    Java中怎么使用Thread和Runnable创建线程

    继续往下,可以看出确实是在这里初始化的。

    Java中怎么使用Thread和Runnable创建线程

    所以,Runnbale接口的run方法,是通过Thread的成员变量去执行的。

    以上就是关于“Java中怎么使用Thread和Runnable创建线程”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI