7:Multithreading-Java API 实战(上)

简介: 7:Multithreading-Java API 实战

1. 问题的提出


一台计算机为何能够执行多个程序?它们是怎么执行多个程序的?


  • 电脑可以同时做很多事情,一边聊天,一边听歌,一边上网查资料等


  • 原因是电脑有多个核心(脑子),一个核心可以做一件事情,多个核心就可以做多件事情


  • 而多线程就是一台电脑,CPU可以同时运行两个程序(表面上),实际上是进程切换的快,第一个进程打开,第二个进程挂起,给你一种错觉



例如CPU的6核12线程,就相当于有6个工人去运行进程



2. 核心数、进程、线程


  • 一个核心下有多个进程,而一个进程下又会有多个线程


3. 进程和线程的区别以及对应应用


进程和线程的区别


  • 线程只是一个进程中不同执行的路径


  • 进程与进程之间不会相互影响,因为它们是占有独立内存的


  • 而线程是占用共同的内存,所以一个线程出问题,那这个进程下的线程都会出问题


  • 多进程的程序要比多线程的程序健壮,而多线程运行效率更高,但是线程不能独立执行,必须依存在应用程序中,操作系统不会把线程看作多个独立应用


  • 但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。例如很多人共同抢一双鞋,就要用到多线程


并发与并行


  • 并发(Concurrent)指一个CPU需要进行多个进程,这样就需要不停的切换,让进程不断的交替执行


  • 并行(Parallel)指多个CPU同时执行多个进程


4. 多线程程序含义、多线程的作用


创建多线程DemoThread类,Alt+Insert调出Generate选择Override Methods



选择run():void



mainThreadDemoThread两个字符串交替执行



如果用.run()的话会出现问题,死循环一直在跑,用.start()可以多开启一个线程,然后去自动调用.run(),再继续进行当前线程



显示的结果是两个死循环的内容在交替执行,其原因就是使用了.start()后两个线程一直在执行


5. 多线程的执行过程


多线程的执行方式


  • 一般的程序是从main出发,直线向下进行,只有一条主线


  • 多线程在main主线程序遇到线程程序时会转到线程程序,并返回到主线程序中,这样main程序和线程程序同时执行



6. Runnable


前面我们创建线程单继承了Thread,无法继承别的类,因为Java不支持多继承

使用Runable接口来创建线程,要使用其方法,必须创建Thread对象实现



Ctrl + 左键查看Thread源码



源码中,Thread类就是实现了Runnable接口,而在Thread的构造方法中也有许多方法函数需要传递Runnable接口类型



而我们在主函数中实现的应该是第一种传递方式,Thread的构造方法还有很多方式,这些构造函数都有一个特点就是全部使用init这个方法对线程进行实现


init源码的变量注释及源码


  • 在原始的init中名字是不能为空的,如果名字为空会报空指针异常,但是在其他的函数中,如果程序员不给thread.name赋值的话也可以自动生成一些值


  • 涉及线程组相关的安全问题


  • 变量的赋值和其他函数的初始化相关




下面init方法是对上面的函数的衍生,是构造方法中使用的初始方法



7. 简化操作以及线程名


Thread源码里面有传线程名的构造方法,要在原来线程类中自动获取我们在主线程中设置的名字,使用Thread.currentThread().getName()方法,.currentThread()是指当前线程,.getName()是指获取名字



8. 抢购鞋——多线程案例


两种创建线程的方式,一种使用继承,一种使用接口实现,解决了线程名的问题,接下来我们模拟一个多线程的抢鞋程序


抢鞋的逻辑代码涵盖在线程当中,假设有10双鞋,有三个人来抢,一个线程就是一个用户,所以这就有三个名称不一样的线程名


使用Runnable接口创建



9. 后台、守护进程的提出


电脑任务管理器


  • Apps是前台进程,Background processes是后台进程也叫守护进程,这些进程在电脑开机时就被启动,这样电脑才能正常且安全的运作起来,在程序中也是同理


  • 与进程同理,前台线程为用户提供服务,也有后台线程为前台线程提供的服务进行保护或者守护



后台线程的创建过程


  1. 创建一个DaemonThread,实现Runnable接口


  1. 重写run()方法


  1. 在运行类中创建先一个DaemonThread,再用 Thread 用来实现DaemonThread


  1. 最后调用setDaemon(true) 设置成后台守护线程,.start()开启线程



目录
相关文章
|
4天前
|
JSON Java Apache
Java基础-常用API-Object类
继承是面向对象编程的重要特性,允许从已有类派生新类。Java采用单继承机制,默认所有类继承自Object类。Object类提供了多个常用方法,如`clone()`用于复制对象,`equals()`判断对象是否相等,`hashCode()`计算哈希码,`toString()`返回对象的字符串表示,`wait()`、`notify()`和`notifyAll()`用于线程同步,`finalize()`在对象被垃圾回收时调用。掌握这些方法有助于更好地理解和使用Java中的对象行为。
|
1天前
|
安全 API 数据安全/隐私保护
速卖通AliExpress商品详情API接口深度解析与实战应用
速卖通(AliExpress)作为全球化电商的重要平台,提供了丰富的商品资源和便捷的购物体验。为了提升用户体验和优化商品管理,速卖通开放了API接口,其中商品详情API尤为关键。本文介绍如何获取API密钥、调用商品详情API接口,并处理API响应数据,帮助开发者和商家高效利用这些工具。通过合理规划API调用策略和确保合法合规使用,开发者可以更好地获取商品信息,优化管理和营销策略。
|
8天前
|
Java
Java基础却常被忽略:全面讲解this的实战技巧!
本次分享来自于一道Java基础的面试试题,对this的各种妙用进行了深度讲解,并分析了一些关于this的常见面试陷阱,主要包括以下几方面内容: 1.什么是this 2.this的场景化使用案例 3.关于this的误区 4.总结与练习
|
18天前
|
算法 Java API
如何使用Java开发获得淘宝商品描述API接口?
本文详细介绍如何使用Java开发调用淘宝商品描述API接口,涵盖从注册淘宝开放平台账号、阅读平台规则、创建应用并申请接口权限,到安装开发工具、配置开发环境、获取访问令牌,以及具体的Java代码实现和注意事项。通过遵循这些步骤,开发者可以高效地获取商品详情、描述及图片等信息,为项目和业务增添价值。
52 10
|
26天前
|
存储 Java 数据挖掘
Java 8 新特性之 Stream API:函数式编程风格的数据处理范式
Java 8 引入的 Stream API 提供了一种新的数据处理方式,支持函数式编程风格,能够高效、简洁地处理集合数据,实现过滤、映射、聚合等操作。
44 6
|
24天前
|
Java 程序员
Java基础却常被忽略:全面讲解this的实战技巧!
小米,29岁程序员,分享Java中`this`关键字的用法。`this`代表当前对象引用,用于区分成员变量与局部变量、构造方法间调用、支持链式调用及作为参数传递。文章还探讨了`this`在静态方法和匿名内部类中的使用误区,并提供了练习题。
26 1
|
26天前
|
Java API 开发者
Java中的Lambda表达式与Stream API的协同作用
在本文中,我们将探讨Java 8引入的Lambda表达式和Stream API如何改变我们处理集合和数组的方式。Lambda表达式提供了一种简洁的方法来表达代码块,而Stream API则允许我们对数据流进行高级操作,如过滤、映射和归约。通过结合使用这两种技术,我们可以以声明式的方式编写更简洁、更易于理解和维护的代码。本文将介绍Lambda表达式和Stream API的基本概念,并通过示例展示它们在实际项目中的应用。
|
1月前
|
安全 Java 开发者
Java 多线程并发控制:深入理解与实战应用
《Java多线程并发控制:深入理解与实战应用》一书详细解析了Java多线程编程的核心概念、并发控制技术及其实战技巧,适合Java开发者深入学习和实践参考。
58 6
|
1月前
|
存储 安全 Java
Java多线程编程中的并发容器:深入解析与实战应用####
在本文中,我们将探讨Java多线程编程中的一个核心话题——并发容器。不同于传统单一线程环境下的数据结构,并发容器专为多线程场景设计,确保数据访问的线程安全性和高效性。我们将从基础概念出发,逐步深入到`java.util.concurrent`包下的核心并发容器实现,如`ConcurrentHashMap`、`CopyOnWriteArrayList`以及`BlockingQueue`等,通过实例代码演示其使用方法,并分析它们背后的设计原理与适用场景。无论你是Java并发编程的初学者还是希望深化理解的开发者,本文都将为你提供有价值的见解与实践指导。 --- ####
|
1月前
|
开发框架 Java 关系型数据库
Java哪个框架适合开发API接口?
在快速发展的软件开发领域,API接口连接了不同的系统和服务。Java作为成熟的编程语言,其生态系统中出现了许多API开发框架。Magic-API因其独特优势和强大功能,成为Java开发者优选的API开发框架。本文将从核心优势、实际应用价值及未来展望等方面,深入探讨Magic-API为何值得选择。
55 2