我在大连敲代码《多线程》

本文详细介绍了Java中如何创建和启动新线程,包括使用Thread实例、非lambda和lambda表达式的方式。强调了调用start()而非run()来启动新线程的重要性,并解释了start()方法内部的native机制。同时,文中还提醒了一个线程对象只能调用一次start()的规则。
摘要由CSDN通过智能技术生成

创建新线程


1.Java程序启动的时候,实际上是启动了一个JVM进程,然后由JVM启动主线程来执行main()方法。
在main()方法中,我们又可以启动其他线程。
要创建一个新线程,我们需要实例化一个Thread实例,然后调用它的start()
        Thread t1 = new Thread();
        t1.start();
2.非lambda表达式写法
        Thread t2 = new Thread() {
            public void run() {
                System.out.println("非lambda表达式 start new thread");
            }
        };
        t2.start();
3.Java8 lambda表达式语法进一步简写
        Thread t3 = new Thread(() ->{
            System.out.println("lambda表达式 start new thread");
        });
        t3.start();
4.直接调用run()方法,相当于调用了一个普通的Java方法,当前线程并没有任何改变,也不会启动新线程。
上述代码实际上是在main()方法内部又调用了run()方法,打印hello语句是在main线程中执行的,没有任何新线程被创建。
必须调用Thread实例的start()方法才能启动新线程,如果我们查看Thread类的源代码,
会看到start()方法内部调用了一个private native void start0()方法,
native修饰符表示这个方法是由JVM虚拟机内部的C代码实现的,不是由Java代码实现的。

        Thread t4 = new MyThread();
        t4.run();
        t4.start();

        /*定义内部类*/
        static class MyThread extends Thread {
            public void run() {
                System.out.println("hello");
            }
        }

总结:

Java用Thread对象表示一个线程,通过调用start()启动一个新线程;

一个线程对象只能调用一次start()方法;

线程的执行代码写在run()方法中;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不惑_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值