多线程使用笔记-20200214

理论概念

1.线程安全
2.线程的同步和异步
3.线程的阻塞与非阻塞
4.并发与并行
5.线程死锁

线程安全

概念 :一个类被多个线程以任意方式同时调用仍能保证其准确性,则称为线程安全。
课程涉及的问题 :final修饰 是否一定安全
答案:否
举例:final修饰的int类 可以保证其安全性 但是final修饰的List集合 仍然可以进行添加元素
final修饰可以保证其对象在构建过程中不被使用 保证不被泄露

线程的同步和异步

概念:
同步:连续依赖 前者的响应必须依赖后者的,否则为异步。
例如:浏览器的响应,客户端需等待服务端的响应。

线程的阻塞与非阻塞

概念:
阻塞:即被线程处于挂起状态(线程的一种状态,解释下文),否则为非阻塞。

线程的同步 异步与阻塞 非阻塞 区别
前者是两种线程行走的方式,后者是线程的两种状态

并发与并行

首先需了解单线程和多线程,并发和并行都是基于多线程
并发:例如单台处理器处理事件A和B,处理器会轮流处理两个事件
并行:例如两台处理器处理事件A和B,处理器同时处理两个事件

线程的状态

这里是引用https://www.runoob.com/note/34745

五种状态下图
在这里插入图片描述

状态详解:
1.新建(NEW):新创建一个线程对象。

2.可运行(RUNNABLE):有的地方也叫就绪状态,线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu 的使用权 。

3.运行(RUNNING):可运行状态(runnable)的线程获得了cpu 时间片(timeslice) ,执行程序代码。

4.阻塞(BLOCKED):阻塞状态是指线程因为某种原因放弃了cpu 使用权,也即让出了cpu timeslice,暂时停止运行。直到线程进入可运行(runnable)状态,才有机会再次获得cpu timeslice 转到运行(running)状态。阻塞的情况分三种:

	(一). 等待阻塞:运行(running)的线程执行o.wait()方法,JVM会把该线程放入等待队列(waitting queue)中。

	(二). 同步阻塞:运行(running)的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入锁池(lock pool)中。

	(三). 其他阻塞:运行(running)的线程执行Thread.sleep(long ms)或t.join()方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态。当sleep()状态超时、  join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入可运行(runnable)状态。

5.死亡(DEAD):线程run()、main() 方法执行结束,或者因异常退出了run()方法,则该线程结束生命周期。死亡的线程不可再次复生

这里是引用https://www.jianshu.com/p/82a0c5a59094

注意的是阻塞和等待状态的区别
			用实例区分:正在的运行的线程调用方法可以进入等待状态,正在运行的多个线程如果去访问同一个带锁的类,那么后者因前者已经占用该类而进入阻塞状态。
线程类常用的方法以及例子:
	Thresd.yield 让出cpu时间片,然后所有线程去竞争cpu资源。
	Thresd.sleep 线程休眠指定时间,时间到该线程继续执行无需竞争资源,不会释放锁。
	Thresd.join 比如A里面起了b和c线程线程 如果b线程调用了join方法那么在A线程里 所有线程需等待b执行完成 才会执行。
	object.wait 使线程进入等待状态 并释放锁。例如两个线程A和B同时使用同一个静态变量lock(即锁) 若A在执行则B不会执行 A里面调用wait方法会释放资源lock 之后B才会执行。

线程的死锁

概念:多个线程 因竞争资源造成阻塞。
避免:1.不使用锁或 不使用两把以上的锁
2.若必须使用两把锁 则必须保证两把锁在程序中的获取顺序一致
3.尝试获取超时释放的锁 使用trylock类似trycatch用法 避免线程阻塞
解决办法:重启
分析办法:jps命令 用于显示虚拟机中运行的所有主类以及进程的唯一ID。
jstack命令 是即JVM当时的进程快照,跟日志一样可定位死循环和死锁所在的类。

以上主要内容参考自csdn学院课程"Java并发编程精讲",讲师"祝侦科"。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值