第五阶段 Thread

文章详细介绍了Java中的多线程概念,包括进程的动态性、独立性和并发性,以及线程的定义和自私性。线程创建的三种方式——继承Thread、实现Runnable和实现Callable,并分析了各自的优缺点。此外,还提到了线程中常用的API如getName(),setName()和sleep()。文章强调了多线程在提升代码响应速度的同时,需注意资源安全和管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

多线程意味着快速的去抢占对应资源,在大部分场景是多核CPU的今天,去用于提升代码响应速度是一种很好的方式。有利必有弊,资源的安全性和可操作性是使用多线程时最应考虑到的事。

线程和进程的再熟悉

1、进程:

老生常谈属于是,什么是进程——运行中的程序,有单独进程号的-pid。进程的三个状态:

(1)动态性:进程是运行中的程序,要动态的去占用内存,CPU和网络资源

(2)独立性:进程与进程之间是相互独立的,占用各自的内存空间

(3)并发性:假如CPU是单核的,那么某一个具体时刻只有一个进程在运行 - 达到并行的目的,显示为同一时刻多个进程在运行

2、线程:

什么是线程,线程是属于进行的,进程中包含各单元子模块,各单元子模块共同构建起进程功能。多个线程存在的唯一目的就是抢占资源然后完成自己的任务——线程是自私的。

线程的创建

线程的创建方式有三种,分别是继承Thread,实现Runable,实现Callable,接下来分别阐述具体的对应实现以及各自优势

1、继承Thread类去进行创建

public class ThreadDem_one {

    public static void main(String[] args) {
        ThreadRun threadRun = new ThreadRun("xue");
        threadRun.start();
        System.out.println(threadRun.getName());
        //main与子线程是并发执行的——推进的——因此在执行过程中会出现随机性
        for (int i = 0; i < 10; i++) {
            System.out.println("主线程运行中:" + i);
        }

    }

}

class ThreadRun extends Thread{

    //使用构造器 - 直接使用名称去对线程进行构造 - 创造出线程名称特定的线程
    public ThreadRun(String name){
        super(name);
    }

    @Override
    public void run() {
        for (int i = 0; i < 5; i++) {
            System.out.println("子线程运行中" + i);
        }
    }
}

注:继承减小了可扩展性——是劣势我认为

2、实现runable方式去进行创建

public static void main(String[] args) {
        MyRunAble myRunAble = new MyRunAble();
        Thread thread = new Thread(myRunAble, "xue");
        thread.start();
        for (int i = 0; i < 10; i++) {
            System.out.println(Thread.currentThread().getName() + ":" + i);
        }
    }

class MyRunAble implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i < 10 ; i++) {
            System.out.println(Thread.currentThread().getName() + ":" + i);
        }
    }

    public void test(){
        System.out.println("test....................");
    }
}

注:根据Thread构造类,利用runable对象生成线程对象,且runbale多实现,具有可扩展性(里面能写很多类)

3、实现callable接口——callable在目前的图搜中已经使用,还得我旭哥

实现方式先总结下:

(1)生成callabele对象

(2)生成futuretask对象

(3)根据Thread构造器生成thread对象

public class ThreadDem_four {

    public static void main(String[] args) {
        MyCallable myCallable = new MyCallable();

        FutureTask<String> task = new FutureTask<>(myCallable);
        new Thread(task).start();

        try {
            //当去get的时候,CPU会让出时间片,让FutureTask种的任务先去进行执行
            String s = task.get();
            System.out.println(s);
        } catch (Exception e) {
            e.printStackTrace();
        }

        for (int i = 0; i < 100; i++) {
            System.out.println(Thread.currentThread().getName() + " : " + i );
        }



    }

}

//多实现,相当于可以业务分离
class MyCallable implements Callable<String>{

    @Override
    public String call() throws Exception {
        int m = 0;
        for (int i = 0; i < 100; i++) {
            m += i;
        }
        return String.valueOf(m);
    }
}

生成task,thread启动task,task.get()获取对应结果,在get时,cpu会让出足够的时间片。同时,它也可以抛出异常,这可以说是优势之一

注:Thread构造器总结

* —— thread类的构造器
* public Thread()
* public Thread(String name)、
* public Thread(Runadle runable)
* public Thread(Runable runable,String name)

可以看出来,在后两种构造器身上,实现了创建线程与业务实现解耦,这是后两种的优势

线程中常用的API

 public static void main(String[] args) throws InterruptedException {
        Thread thread = new Thread();
        thread.getName();
        thread.setName("qwq");
        Thread.sleep(12121);
        Thread.currentThread().getName();
        thread.currentThread().setName("wqwqw");
    }

先去记录这些,剩下的在接下来几期补充。

使用芯片:MPU-6050MPU-6050数据手册) 供电电源:3-5v(内部低压差稳压) 通信方式:标准IIC通信协议 芯片内置16bit AD转换器,16位数据输出 陀螺仪范围:±250 500 1000 2000 °/s 加速度范围:±2±4±8±16g MPU-6000(MPU-6000数据手册)为全球首例整合性6轴运动处理组件,相较于多组件方案,免除了组合陀螺仪与加速器时之轴间差的问题,减少了大量的包装空间。MPU-6000整合了3轴陀螺仪、3轴加速器,并含可藉由第二个I2C端口连接其他厂牌之加速器、磁力传感器、或其他传感器的数位运动处理(DMP: Digital Motion Processor)硬件加速引擎,由主要I2C端口以单一数据流的形式,向应用端输出完整的9轴融合演算技术 InvenSense的运动处理资料库,可处理运动感测的复杂数据,降低了运动处理运算对操作系统的负荷,并为应用开发提供架构化的API。 MPU-6000的角速度全格感测范围为±250、±500、±1000与±2000°/sec (dps),可准确追緃快速与慢速动作,并且,用户可程式控制的加速器全格感测范围为±2g、±4g±8g与±16g。产品传输可透过最高至400kHz的I2C或最高达20MHz的SPI。 MPU-6000可在不同电压下工作,VDD供电电压介为2.5V±5%、3.0V±5%或3.3V±5%,逻辑接口VVDIO供电为1.8V± 5%。MPU-6000的包装尺寸4x4x0.9mm(QFN),在业界是革命性的尺寸。其他的特征包含内建的温度感测器、包含在运作环境中仅有±1%变动的振荡器。 应用运动感测游戏 现实增强 电子稳像 (EIS: Electronic Image Stabilization) 光学稳像(OIS: Optical Image Stabilization) 行人导航器 “零触控”手势用户接口 姿势快捷方式 认证 市场智能型手机 平板装置设备 手持型游戏产品 3D遥控器 可携式导航设备 特征以数字输出6轴或9轴的旋转矩阵、四元数(quaternion)、欧拉角格式(Euler Angle forma)的融合演算数据。 具有131 LSBs/°/sec 敏感度与全格感测范围为±250、±500、±1000与±2000°/sec 的3轴角速度感测器(陀螺仪)。 可程式控制,且程式控制范围为±2g、±4g、±8g和±16g的3轴加速器。 移除加速器与陀螺仪轴间敏感度,降低设定给予的影响与感测器的飘移。 数字运动处理(DMP: Digital Motion Processing)引擎可减少复杂的融合演算数据、感测器同步化、姿势感应等的负荷。 运动处理数据库支持Android、Linux与Windows 内建之运作时间偏差与磁力感测器校正演算技术,免除了客户须另外进行校正的需求。 以数位输出的温度传感器 以数位输入的同步引脚(Sync pin)支援视频电子影相稳定技术与GPS 可程式控制的中断(interrupt)支援姿势识别、摇摄、画面放大缩小、滚动、快速下降中断、high-G中断、零动作感应、触击感应、摇动感应功能。 VDD供电电压为2.5V±5%、3.0V±5%、3.3V±5%;VDDIO为1.8V± 5% 陀螺仪运作电流:5mA,陀螺仪待命电流:5A;加速器运作电流:350A,加速器省电模式电流: 20A@10Hz 高达400kHz快速模式的I2C,或最高至20MHz的SPI串行主机接口(serial host interface) 内建频率产生器在所有温度范围(full temperature range)仅有±1%频率变化。 使用者亲自测试 10,000 g 碰撞容忍度 为可携式产品量身订作的最小最薄包装 (4x4x0.9mm QFN)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值