Java多线程

Java语言中多线程的实现有3种方法

1.继承Thread类,重写run()

public class Test1 extends Thread{

    @Override
    public void run(){
        System.out.println("thread begin!");
    }

    public static void main(String[] args){

        Test1 test = new Test1();
        test.start();
    }

}

该线程实例的创建依赖于Thread类,那么看下源码Thread类的实现:

public class Thread implements Runnable{

            //  ......

        //先将新建的线程添加进线程组中,标志为可运行状态
        public synchronized void start() {

        if (threadStatus != 0)
            throw new IllegalThreadStateException();

        group.add(this);  //将当前新建的线程对象添加到线程组

        boolean started = false;
        try {
            start0();
            started = true; //标识为可运行状态
        } finally {
            try {
                if (!started) {
                    group.threadStartFailed(this);
                }
            } catch (Throwable ignore) {

            }
        }
    }

   @Override
    public void run() {
        if (target != null) {
            target.run();
        }
    }


}

需要注意的是:调用start()后并不是立即执行多线程,而且Thread本质是实现Runnable接口的一个实例而已

我们通过调用Thread类的start()方法来启动一个线程,
这时此线程是处于就绪状态,
并没有运行。
然后通过此Thread类调用方法run()来完成其运行操作的,
这里方法run()称为线程体,
它包含了要执行的这个线程的内容,
Run方法运行结束,
此线程终止,
而CPU再运行其它线程。

2.实现Runnable接口,实现接口中的run()

主要步骤:

自定义类并实现Runnable接口,实现run()
创建Thread对象,用实现Runnable接口的对象作为参数实例化该Thread对象
调用Thread的start()

public class Test2 implements Runnable{

    @Override
    public void run(){
        System.out.println("thread begin!");
    }

    public static void main(String[] args){
        Test2 test = new Test2();
        test.run();
    }
}

Runnable接口的源码:

public interface Runnable {

    public abstract void run();
}

通过两个demo我们发现,其实不管是继承Thread类还是实现Runnable接口来实现多线程,最终都是通过Thread对象的API控制线程

不过,我们也发现run()方法和start()方法似乎有着相似的功能,但又不一样。
试着比较下他们的区别

class ThreadDemo extends Thread{

    @Override
    public void run(){
        System.out.println("ThreadDmo:begin!");
        try {
            Thread.sleep(1000);
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }finally{
            System.out.println("ThreadDemo:end!");
        }

    }

}

public class Test3 {

    public static void test1(){
        System.out.println("test1:begin!");
        Thread t1 = new ThreadDemo();
        t1.start();
        System.out.println("test1:end!");
    }

    public static void test2(){
        System.out.println("test2:begin!");
        Thread t2 = new ThreadDemo();
        t2.run();
        System.out.println("test2:end");
    }

    public static void main(String[] args){
        test1();
        try {
            Thread.sleep(5000);
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }finally{
            System.out.println();
            test2();
        }
    }

}

输出:

test1:begin!
test1:end!
ThreadDmo:begin!
ThreadDemo:end!

test2:begin!
ThreadDmo:begin!
ThreadDemo:end!
test2:end

从test1的运行结果可以看出,线程t1是从test1方法结束后才执行的System.out.println(“test1:end”)语句不需要等待t1.start()运行结果就可以执行
test1中调用start()方法是异步的。所以main()线程与t1线程是异步的。从test2的运行结果可以看出,调用t1.run()是同步的调用方法,因为System。out.println(“test2:end”)。只有等t1.run()调用结束后才可执行

为了在Windows安装ADB工具,你可以按照以下步骤进行操作: 1. 首先,下载ADB工具包并解压缩到你自定义的安装目录。你可以选择将其解压缩到任何你喜欢的位置。 2. 打开运行窗口,可以通过按下Win+R键来快速打开。在运行窗口中输入"sysdm.cpl"并按下回车键。 3. 在系统属性窗口中,选择"高级"选项卡,然后点击"环境变量"按钮。 4. 在环境变量窗口中,选择"系统变量"部分,并找到名为"Path"的变量。点击"编辑"按钮。 5. 在编辑环境变量窗口中,点击"新建"按钮,并将ADB工具的安装路径添加到新建的路径中。确保路径正确无误后,点击"确定"按钮。 6. 返回到桌面,打开命令提示符窗口。你可以通过按下Win+R键,然后输入"cmd"并按下回车键来快速打开命令提示符窗口。 7. 在命令提示符窗口中,输入"adb version"命令来验证ADB工具是否成功安装。如果显示版本信息,则表示安装成功。 这样,你就成功在Windows安装ADB工具。你可以使用ADB工具来执行各种操作,如枚举设备、进入/退出ADB终端、文件传输、运行命令、查看系统日志等。具体的操作方法可以参考ADB工具的官方文档或其他相关教程。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [windows环境安装adb驱动](https://blog.youkuaiyun.com/zx54633089/article/details/128533343)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Windows安装使用ADB简单易懂教程](https://blog.youkuaiyun.com/m0_37777700/article/details/129836351)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值