多线程相关知识(2015年 10月28号 (更新))

sleep(),wait(),notify()的区别


  • sleep() 方法的作用是在指定毫秒数内让当前正在执行的线程休眠(暂时停止)。这是一个静态方法,他只属于类本身,不属于该类其对象,也就是说sleep这个方法的调用方式是 Thread.sleep()调用此方法需要捕捉Interrupted Exception 异常。它在调用的时候也是要在同步内的,即在synchronized关键字的代码块或者方法中调用。
  • wait()方法的作用是使当前执行代码的线程进行等待,停止在wait()所在的代码行,直到接到通知或被中断为止。只能在同步方法或在同步块中调用此方法,同步块:synchronized()
    {
    ......
    Eat.wait();//执行完wait()后线程执行等待在此处,**同时释放对象锁**
    ......
    }

    -如果不在关键字synchronized作用范围内调用wait()方法,就会抛出Illegalmoniter State Exception 异常,但并不需要用try-catch捕捉

    -当线程等待在wait()代码行时 收到了interrupt异常导致线程终止,其对象锁也会被释放

  • 方法notify()同wait()一样的同步调用方法,否则抛出异常也相同。该方法是用来通知那些可能等待该对象的对象锁的线程。执行完这行代码后,当前线程不会马上释放该对象锁,而是线程执行退出该synchnorized关键字的代码范围后,才释放对象锁。然后,那些被wait()住了的线程才能开始竞争该对象锁。

    -notify()只唤醒一个线程,而notifyall()方法则唤醒所有等待该对象锁的线程,至于随机唤醒还是优先唤醒则取决于JVM

  • Thread.sleep()Object.wait() 都可以暂停当前线程释放CPU的控制权 主要的区别是object.wait() 同时还要释放对象锁。


-关于Synchronized-我个人可能不太准确的理解
- synchronized(this){} :this 代表的是某个类的一个对象,所以其内存锁是针对该对象在不同线程内的互斥操作!
- synchronized(static XXX){} :static 成员属于类所有,其内存空间为该类的所有对象所共有,所以对该类的静态成员加锁,相当于对该类的所有内存空间加锁,也就是对整个类加锁,该类的所有成员间均互斥,同一时间内只能有一个线程可以访问该类的对象。

2015年 10月28号 (更新)

关于线程状态

  • New(新创建):new Thread(...)之后,start()之前的状态。

  • Runnable(可运行):一旦调用了start(),线程就是这个状态了。

  • Blocked(被阻塞):暂停执行或着同时扔掉了对象锁

  • Waiting(等待):等待另一个线程给出抢夺对象锁的信号或者等待暂停的时间过去

  • Timed Waiting(计时等待):当结束计时的时候就可以回到运行状态

  • Terminated(被终止): run()结束或者因未捕获异常而被迫终止run()

可用getState()的方法查看线程的当前状态。


***以上所有内容作为本人学习积累,如有误,希望看得的朋友们尽情批评指教,对我学习有帮助的我都虚心接受。***
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值