IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> Java-线程 -> 正文阅读

[开发测试]Java-线程

Java-线程

最近准备笔试,看到有线程方面的笔试题,就总结了一下有关线程方面的知识

1.程序、进程、线程
程序:一段静态代码,应用软件的执行蓝本
进程:程序的一次动态执行,对应从代码加载,执行至完成的一整个完整过程,也是进程从产生、发展到消亡的过程
线程:比进程更小的执行单位,进程在执行过程中可以产生多个线程,形成多条执行线索,每条线索(线程)也有它自身的产生、存在和消亡的过程、也是一个动态的概念。
2.线程与进程的区别:
(1)地址空间:进程内的一个执行单元,进程至少有一个线程,它们共享进程的地址空间,而进程有自己独立的地址空间;进程之间数据状态完全独立,线程间共享一块儿内存空间;
  (2)资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源;进程通过多个线程占据系统的资源,线程占CPU的基本单位;
  (3)线程是处理器调度的基本单位,但进程不是;
  (4)二者均可并发执行。
3.Java中的线程:
——每一个Java程序都有一个默认的主线程,当JVM加载代码发现main方法之后,就会立即启动主线程
主线程的特点: ①是产生其他子线程的线程
②不一定是最后完成执行的线程
——如果main方法中没有创建其他线程,那么当main方法执行完最后一个语句,JVM就会结束Java程序(单线程)
——如果main方法中又创建了其他的线程,那么JVM就要在主线程和其他线程之间轮流切换,JVM要等程序中所有的线程都结束之后才结束程序(多线程)
4.多线程的优势:
减轻编写的交互频繁,涉及多面的程序的困难;
程序的吞吐量会得到改善
由多个处理器的系统,可以并发运行不同的线程,否则任何时刻都只有一个线程在运行
同时执行是人的感觉,在线程之间实际上是轮换执行的
5.线程的使用场景:想要同时处理多事件(单线程处理不了,必须使用多线程);多个线程分解大任务(用单线程可以做,但使用多线程可以更快)
6.线程的生命周期:新建、就绪、运行、阻塞、死亡

新建:线程对象已经创建,还没有调用start()方法
可运行:线程调用start方法,但调度程序还没有把它选定为运行线程
运行:线程调度程序从可运行的线程池中选择一个线程作为当前线程
等待/阻塞/睡眠:线程仍是活的,但是没有条件运行,它是可运行的,当某事件出现,他可能返回到可运行状态
死亡:当线程的run方法完成即为死去,线程一旦死亡,就不能复生,一个死去的线程上调用start方法,会抛出Java.lang.illegalThreadException异常
7.Java中创建多线程
(1)继承Thread类:重写run方法–>new一个线程对象–>调用对象的start方法启动线程
(2)实现Runnable接口:实现run方法–>创建一个Runnable类的对象r,new MyRunnable–>创建Thread类的对象并将Runnable对象作为参数,newThread(r)–>调用Thread对象的start方法启动线程

(3)对比:
①继承Thread类实现多线程
1)优点:编写简单,如果需要访问当前线程直接使用this即可获得当前线程.
2)缺点:因为线程类已经继承了Thread类,不能再继承其他的父类
②实现Runnable接口
1)优点:线程类只实现了Runable接口,还可以继承其他的类. 这种方式可以多个线程共享同一个目标(target)对象,非常适合多个相同线程来处理同一份资源的情况,从而可以将代码和数据分开,形成清晰的模型,较好地体现了面向对象的思想
2)缺点:编程稍微复杂,需要访问当前线程,必须使用Thread.currentThread()方法

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-09-08 11:02:20  更:2021-09-08 11:02:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 0:43:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码