线程基本方法

线程相关的基本方法有wait,notify,notifyAll,sleep,join,yield等。 


线程等待(wait)

调用该方法的线程进入WAITING 状态,只有等待另外线程的通知或被中断才会返回,需要注意的 是调用wait()方法后,会释放对象的锁。因此,wait方法一般用在同步方法或同步代码块中。 

线程睡眠(sleep)

导致当前线程休眠,与 wait 方法不同的是 sleep 不会释放当前占有的锁,sleep(long)会导致 线程进入TIMED-WATING状态,而wait()方法会导致当前线程进入WATING状态 

线程让步(yield)

会使当前线程让出 CPU 执行时间片,与其他线程一起重新竞争 CPU 时间片。一般情况下, 优先级高的线程有更大的可能性成功竞争得到 CPU 时间片,但这又不是绝对的,有的操作系统对 线程优先级并不敏感。

线程中断(interrupt)

中断一个线程,其本意是给这个线程一个通知信号,会影响这个线程内部的一个中断标识位。这个线程本身并不会因此而改变状态(如阻塞,终止等)。 

  1. 调用 interrupt()方法并不会中断一个正在运行的线程。也就是说处于 Running 状态的线 程并不会因为被中断而被终止,仅仅改变了内部维护的中断标识位而已。
  2. 若调用 sleep()而使线程处于 TIMED-WATING 状态,这时调用 interrupt()方法,会抛出 InterruptedException,从而使线程提前结束TIMED-WATING状态。 
  3. 许多声明抛出InterruptedException的方法(如Thread.sleep(long mills方法)),抛出异 常前,都会清除中断标识位,所以抛出异常后,调用 isInterrupted()方法将会返回 false。
  4. 中断状态是线程固有的一个标识位,可以通过此标识位安全的终止线程。比如,你想终止 一个线程thread的时候,可以调用thread.interrupt()方法,在线程的run方法内部可以 根据thread.isInterrupted()的值来优雅的终止线程

Join等待其他线程终止

Join方法,等待其他线程终止,在当前线程中调用一个线程的 join() 方法,则当前线程转为阻塞状态,回到另一个线程结束,当前线程再由阻塞状态变为就绪状态,等待 cpu 的宠幸。 

为什么要用join()方法?

很多情况下,主线程生成并启动了子线程,需要用到子线程返回的结果,也就是需要主线程需要 在子线程结束后再结束,这时候就要用到 join() 方法。 

线程唤醒(notify )

Object 类中的 notify() 方法,唤醒在此对象监视器上等待的单个线程,如果所有线程都在此对象上等待,则会选择唤醒其中一个线程,选择是任意的,并在对实现做出决定时发生,线程通过调用其中一个 wait() 方法,在对象的监视器上等待,直到当前的线程放弃此对象上的锁定,才能继续执行被唤醒的线程,被唤醒的线程将以常规方式与在该对象上主动同步的其他所有线程进行竞 争。类似的方法还有 notifyAll() ,唤醒再次监视器上等待的所有线程。

其他方法:

  1. sleep():强迫一个线程睡眠N毫秒。  
  2. isAlive(): 判断一个线程是否存活。  
  3. join(): 等待线程终止。  
  4. activeCount(): 程序中活跃的线程数。  
  5. enumerate(): 枚举程序中的线程。  
  6. currentThread(): 得到当前线程。  
  7. isDaemon(): 一个线程是否为守护线程。  
  8. setDaemon(): 设置一个线程为守护线程。(用户线程和守护线程的区别在于,是否等待主线 程依赖于主线程结束而结束)  
  9. setName(): 为线程设置一个名称。  
  10. wait(): 强迫一个线程等待。  
  11. notify(): 通知一个线程继续运行。  
  12. setPriority(): 设置一个线程的优先级。  
  13. getPriority()::获得一个线程的优先级。  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值