2021-02-26

Java多线程编程
1.程序
存储在磁盘上的一段有序指令的集合,静态的概念
2.进程
正在运行中的程序,动态的概念,是系统进行资源分配和调度的独立单位,每个进程都有独立的内存空间和资源
单核CPU在某一个时间点只能做一件事情,一个进程
听音乐是一个进程,聊QQ是一个进程,看起来像是在同时进行,但其实是cpu在不同的进程之间进行高效的切换,时间很短。可以运行更多的程序,可以提高CPU的使用效率。
多个进程在执行,其实是他们在抢夺CPU的资源,如果一个进程内拥有的线程越多那么它会有更高的几率能够抢到CPU的资源。
3.线程
线程不能独立存在,依赖进程。
是操作系统能够进行运算调度的最小单位,是进程中的一个最基本实体,也是实际的运作单位,在一个进程中可以有多个线程,例如:qq聊天,可以跟张三聊也可以跟李四聊
4.多线程
在同一个进程中可以同时拥有多个线程执行不同的任务
多线程的目的:当某一线程的运行不需要用到CPU的资源,比如只和IO等资源打交道时,让需要使用CPU资源的其他线程获取资源,提高效率,节省时间。
线程的执行是由随机性的。
多线程的目的:更大限度地利用CPU资源。
线程也是个对象
进程——班级,申请的教室资源
线程——每个学员,教员,使用的是班级申请的资源
5.并发和并行
并发:多个线程一起执行(假的)——单核CPU
——CPU时间片轮转
并行:多个线程一起执行(真的)——多核CPU

6.线程创建方式:
1)继承Thread类
2)实现Runnable接口
注意:运行顺序不固定,当线程开启后,程序员就很难控制
A.继承Thread类

B.实现Runnable接口,重写run方法

7.run()和start()的区别:
start()–启动线程
run()–普通方法,启动线程之后由jvm调用run方法,实际执行的方法,如果单纯调用run方法也只是在原来线程中调用,没有开启新线程
8.线程的调度:
分时调度:所有线程轮流使用cpu资源,平均分配时间片段
抢占资源调度(java):优先让优先级高的线程抢占资源,如果线程优先级相同会随机选择。线程优先级高仅仅会提高获取cpu资源的机率
设置线程的优先级,默认为5,线程优先级范围1~10

9.线程同步
隧道在同一时间能过一辆火车,山洞为共享资源
什么时候需要同步:
多线程环境
有共享数据
我们需要将多条语句操作共享数据的地方包起来,当一个线程操作的时候,不让其他线程操作。
房间:对象,数据,共享资源
锁的控制权(钥匙):锁,任意对象都有一个锁
人:线程
一个人获得钥匙后开门进入房间,其他人此时没有钥匙,只能在房间外等待.

实现同步的两种方式:(synchronized)
A.同步方法
B.同步代码块实现
案例1:5辆火车过山洞
同步代码块

也可以锁山洞的class对象,每个类都有唯一的一个类对象

同步方法:

同步代码块锁的对象可以是任意一个对象
同步方法的锁的对象是this,调用这个方法的那个对象,当前类的对象
10.同步的特点
多个线程
多个线程操作的是相同的数据
同步的优点
解决多线程的安全问题
同步的缺点
每个线程都会判断同步上的锁,非常耗费资源,降低效率
11.线程安全:
如果代码所在的进程中有多个线程在执行,并且多个线程可能会同时运行这段代码。如果每次运行的结果和单线程运行的结果是一样的并且其他变量的值也和预期值是一样的,就是线程安全的。反之则线程不安全
12.线程的生命周期
sleep()—一定时间后自动醒来,不释放锁
wait()—需要其他线程唤醒,释放锁

13.线程安全的单例模式

14.线程池
程序启动一个新线程成本是比较高的,因为它涉及到要与操作系统进行交互。而使用线程池可以很好的提高性能,尤其是当程序中要创建大量生存期很短的线程时,更应该考虑使用线程池。线程池里的每一个线程代码结束后,并不会死亡,而是再次回到线程池中成为空闲状态,等待下一个对象来使用。

线程池的优势:
1)降低系统资源消耗,通过重用已存在的线程,降低线程创建和销毁造成的消耗。
3)提高系统响应速度,当有任务到达时,通过复用已存在的线程,无需等待新线程的创建便能立即执行;
4)方便线程并发数的管控。因为线程若是无限制的创建,可能会导致内存占用过多而产生OOM,并且会造成cpu过度切换(cpu切换线程是有时间成本的),线程池中可用线程数量应该取决于可用的并发处理器、处理器内核、内存、网络sockets等的数量。

线程池的使用环境:
1)需要大量的线程来完成任务,且完成任务的时间比较短。 WEB服务器完成网页请求这样的任务,使用线程池技术是非常合适的。因为单个任务小,而任务数量巨大,你可以想象一个热门网站的点击次数。 但对于长时间的任务,比如一个Telnet连接请求,线程池的优点就不明显了。因为Telnet会话时间比线程的创建时间大多了。
2)对性能要求苛刻的应用,比如要求服务器迅速响应客户请求。
3)对于突发性大量客户请求,在没有线程池情况下,将产生大量线程,虽然理论上大部分操作系统线程数目最大值不是问题,短时间内产生大量线程可能使内存到达极限,并出现"OutOfMemory"的错误。

2021-03-26 20:54:33,596 - Model - INFO - Epoch 1 (1/200): 2021-03-26 20:57:40,380 - Model - INFO - Train Instance Accuracy: 0.571037 2021-03-26 20:58:16,623 - Model - INFO - Test Instance Accuracy: 0.718528, Class Accuracy: 0.627357 2021-03-26 20:58:16,623 - Model - INFO - Best Instance Accuracy: 0.718528, Class Accuracy: 0.627357 2021-03-26 20:58:16,623 - Model - INFO - Save model... 2021-03-26 20:58:16,623 - Model - INFO - Saving at log/classification/pointnet2_msg_normals/checkpoints/best_model.pth 2021-03-26 20:58:16,698 - Model - INFO - Epoch 2 (2/200): 2021-03-26 21:01:26,685 - Model - INFO - Train Instance Accuracy: 0.727947 2021-03-26 21:02:03,642 - Model - INFO - Test Instance Accuracy: 0.790858, Class Accuracy: 0.702316 2021-03-26 21:02:03,642 - Model - INFO - Best Instance Accuracy: 0.790858, Class Accuracy: 0.702316 2021-03-26 21:02:03,642 - Model - INFO - Save model... 2021-03-26 21:02:03,643 - Model - INFO - Saving at log/classification/pointnet2_msg_normals/checkpoints/best_model.pth 2021-03-26 21:02:03,746 - Model - INFO - Epoch 3 (3/200): 2021-03-26 21:05:15,349 - Model - INFO - Train Instance Accuracy: 0.781606 2021-03-26 21:05:51,538 - Model - INFO - Test Instance Accuracy: 0.803641, Class Accuracy: 0.738575 2021-03-26 21:05:51,538 - Model - INFO - Best Instance Accuracy: 0.803641, Class Accuracy: 0.738575 2021-03-26 21:05:51,539 - Model - INFO - Save model... 2021-03-26 21:05:51,539 - Model - INFO - Saving at log/classification/pointnet2_msg_normals/checkpoints/best_model.pth 我有类似于这样的一段txt文件,请你帮我写一段代码来可视化这些训练结果
02-06
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大猩猩乔治

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值