java线程简述

java编程中:线程是及其重要的部分,为什么需要使用编程,答案肯定是为了提高效率,若什么都是单线程来做,确实比较恼火。
线程的基本概念:线程cpu的最小执行单元,因为在时间片轮转的关系所以导致在一个时间段中,cpu的一个核心只能执行一段代码。
java开启线程的方法:1、继承Thread,并覆写run方法,并且创建出该对象,使用start方法
2、实现runnable接口,并且覆写run,创建该对象,并创建Thread,把runnable的实现类做为参数传递后,使用start方法。
线程的生命周期
在这里插入图片描述
从上图看:线程通过呢哇Thread,创建出来,然后通过start准备,为什么start是准备呐,因为线程必须等到时间片轮转到了,才能执行,执行完成了就销毁。在执行的时候,可以通过sleep、interrupt、wait方法进入阻塞状态,然后又通过睡眠时间到了,notify、notifyall唤醒线程。
start():线程开启,并进入就绪状态
sleep():线程休眠,不释放锁
interrupt():线程中断,实际上是给线程设置标志位,并没有释放锁,等synchonrize代码执行完成后,才释放
isInterrupter():检查线程中断标志位。
interrupted():检查线程中断位,执行完后,标志位会复位false
wait():对象等待,并且释放锁
notify():随机唤醒某个线程
notifyAll():唤醒所有线程
yield():让线程让出cpu的执行权,但是不让出锁。
join():让线程优先执行
setPriority():设置线程的优先级
setsetDaemon():设置位守护线程,只有所有的用户线程结束后,守护线程才结束
如果在线程中使用了标志位并且使用了有带阻塞的方法,并且抛出了异常,必须在异常中对标志进行进行对标志的设置,不然会造成死锁,因为在抛出异常后,是不会执行到标志位检查
syachonrize:同步锁,保证同一时间只能有一个线程访问被锁住的代码块,注意,一定要锁住同一对象,不然会造成死锁,因为2个锁的话是无意义的,锁一定是锁住了某个对象
volatile:最轻量的同步锁,保证变量的可见性,但是不保证线程安全,适合一些多读的场景
ThreadLocal:线程本地变量,它保证所有线程都是相互隔离的,实现原理,在内部实现了Entry【】数组,其中k值就是Thread,ThreadLoca不能使用static变量,否则会线程不安全。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值