线程

线程的五种状态

常用方法,会导致状态变化:

start,创建一个线程,调用start方法开始分配内存空间,所有的线程都从start开始,start()不能执行两次

什么时候线程开始运行,不由JVM,java代码控制,它是由OS决定的。

Run,运行状态会调用业务方法。Thread.run().如果是自己去调用线程run方法,这个线程就废了,它就不是线程了,它变成了普通类的方法。必须交给JVM,OS去管理,Run方法执行完成,线程就结束,释放资源。

Yield()特殊,它会把运行状态线程,强制退回到就绪状态,代码主动调用。主动把CPU让出来,让其他线程去执行。资源同时利用,工作分配更加均匀。

sleep()延时,他会把CPU让出来,先阻塞等着,sleep(1000);阻塞1s中,然后变成就绪状态。

Yield和sleep区别,yield立即进入就绪状态,sleep要阻塞一会,自己设置,等延长时间过去1000ms,然后才进入就绪状态。

join,执行join操作,运行快的所有线程都等待,直到最慢的那个线程执行完成,会把它们的结果统计计算,算完后,所有线程结束。

wait 等待,特殊线程优先级,线程参数可以设置线程优先级共10个级别,数字越小,级别越高,默认线程级别数为5,

notify  通知,也称为唤醒。

interrupt  中断,之前停止它,让它继续执行一般抛异常,

sychronized(this){}  关键字,同步,同步锁,代码快,多行代码被枷锁。互斥,独占,其他线程就不能执行,阻塞,等待。原子性操作。一次执行,成功,如果失败,回滚。全部回退。别的线程不能访问,就不能干扰,就不会造成线程安全问题。

五种状态:

1.new 新建:分配内存空间,初始化。

2.runnable  就绪:人工执行代码线程方法start().CPU它要调用线程时,只能线程先在就绪的状态.等到CPU轮询到该线程,才会拥有CPU资源

3.running   运行:调用线程业务功能,run()、call()等。

第一种情况:业务非常短小,执行很快,如果刚好在CPU轮询分配的时间片内完成,结束dead,释放资源。

第二种情况:业务执行时间非常长,超过CPU分配的轮询时间片,此时当前线程就被挂起wait(),它就让出资源,CPU去执行其他线程。等到CPU轮询回来,再次执行恢复现场。继续执行。在这次时间片内执行完成,进入终止状态。

          特殊情况:

          程序主动让出CPU,故意暂时让出CPU,为了并发执行,让其他线程也有执行的机会。

           加锁,当前线程独占资源,其他线程进入阻塞状态,等着重新执行。当前线程执行完成,就把锁释放了,此时另外一个线程就得到资源,就进入就绪状态。CPU不是立即执行而是轮询到它才执行。

Dead   终止。

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值