Java 创建线程

26 篇文章 1 订阅

Java创建线程有两种方法,启动线程会默认调用run方法

方法一

继承Thread类,重写run方法

创建子线程

public class Thread_01 extends Thread{

    @Override
    public void run() {

    }

}

在测试类中启动子线程

    @Test
    public void test01(){
//        创建子线程对象
        Thread_01 thread_01 = new Thread_01();
//        启动子线程
        thread_01.start();
    }
}

方法二

实现Runnable接口,实现接口中的run方法

创建子线程

public class Thread_02 implements Runnable{
    
    @Override
    public void run() {
        
    }
    
}

在测试类中启动子线程

    @Test
    public void test01(){
//        创建子线程对象
        Thread_02 thread_02 = new Thread_02();
        Thread thread = new Thread(thread_02);
//        启动子线程
        thread.start();
    }
}

示例

执行三个循环,两个子线程各执行一个循环,主线程执行一个循环,每个循环花费10秒钟

创建子线程MyThread_01

public class MyThread_01 extends Thread{

    @Override
    public void run() {
        for (int i = 0;i < 10;i++){
            System.out.println("This is Thread_01" + " " + i);
            try {
//                睡眠一秒
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

}

创建子线程MyThread_02

public class MyThread_02 implements Runnable{

    @Override
    public void run() {
        for (int i = 0;i < 10;i++){
            System.out.println("This is Thread_02" + " " + i);
            try {
//                睡眠一秒
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

}

测试类

在测试类中记录执行三个循环所花费的时间

public class MyTest {

    @Test
    public void test(){
        Date time1 = new Date();

//        创建MyThread_01子线程对象
        MyThread_01 myThread_01 = new MyThread_01();
//        启动子线程
        myThread_01.start();

//        创建MyThread_02子线程对象
        MyThread_02 myThread_02 = new MyThread_02();
        Thread thread = new Thread(myThread_02);
//        启动子线程
        thread.start();

        for (int i = 0;i < 10;i++){
            System.out.println("This is main" + " " + i);
            try {
//                睡眠一秒
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        Date time2 = new Date();
        System.out.println("执行时间:" + (time2.getTime()-time1.getTime())/1000);

    }
}

效果演示

在这里插入图片描述

通过执行结果我们可以发现:执行三个循环用了10秒钟,多线程执行是没有规律的

一个循环花费10秒,而使用多线程执行三个循环一共花费了10秒,所以这里就涉及到了线程的并行和并发


并行和并发的区别

并发:任务数大于CPU核心数,CPU在不同任务上切换,在一个任务上执行一段时间再切换到另一个任务上执行一段时间

并行:只能发生在多核CPU上,任务数小于或等于CPU核心数,CPU同时执行多个任务

并行:在一个“时间点”有多个任务同时执行

在这里插入图片描述



并发:在一个“时间段”有多个任务同时执行

在这里插入图片描述



有不对的地方还请指出呀,一定虚心请教 [嘻嘻]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值