线程基本操作

本文详细介绍了Java线程的基本操作,包括线程的创建、安全终止、中断处理,以及线程休眠、等待与通知、挂起与恢复。重点讨论了Thread.sleep()、Object.wait()、join()和yield()方法的使用,强调了线程安全和避免死锁的重要性。此外,还提及了已废弃的线程操作如stop()和suspend(),并解释了为何不应使用它们。
摘要由CSDN通过智能技术生成

线程基本操作

1.线程创建
  创建线程的几种方式
2.线程终止
 Thread.stop()方法,是一个被标注为废弃的方法,原因是stop()方法过于暴力,强行把执行到一半的线程终止,可能会引起一些数据不一致的问题。stop()方法在结束线程时,会直接终止线程,并立即释放这个线程所持有的锁,而这些锁是用来维持对象一致性的。

3.线程中断
 线程中断并不会使线程立即退出,而是给线程发送一个通知,告诉目标线程,有人希望你退出了,至于目标线程接到通知后如何处理,则完全由目标线程自行决定。
 有三个方法与线程中断有关:
 1.Thread.interrupt() 中断线程,会通知目标线程中断,就是设置中断的标志位,中断标志位表示当前线程已经被中断了
 2.Thread.isInterrupted() 判断当前线程是否被中断,检查中断标志位
 3.Thread.interrupted() 判断是否被中断,并清除当前中断状态

4.线程休眠
 Thread.sleep()方法,让当前线程休眠millis毫秒的时间,会抛出InterruptedException中断异常,它不是运行时异常,所以程序必须捕获并处理它。当前线程休眠时,如果被中断,这个异常就会产生。
 它常常配合中断来使用,sleep()方法由于中断而抛出异常,这时它会清除中断标记,如果不加处理,在下一次循环开始时就无法捕获这个中断,所以在异常处理中,再次设置中断标记位。

5.线程等待和通知
 Object.wait()方法,当在一个对象实例上调用wait()方法后,当前线程就会在这个对象上等待。比如,在线程A中,调用了obj.wait()方法,那么线程A就会停止继续执行,转为等待状态,线程A会一直等到其他线程调用了obj.notify()方法为止。
 如果一个线程调用了object.wait()方法,那么它就会进入object对象的等待队列,这个等待队列中,可能会有多个线程,因为系统运行多个线程同时等待某一个对象。当obj.notify()方法被调用时,它就会从这个等待队列中随机选择一个线程,并将其唤醒。要是调用的是obj.notifyAll()方法,它会唤醒在这个等待队列中所有等待的线程。

 Object.wait()和Thread.sleep()比较:
 两者都可以让线程等待若干时间,但wait()方法可以别唤醒,并且wait方法会释放目标对象的锁,而sleep方法不会释放任何资源。

6.线程挂起和继续执行
 Thread.suspend()和Thread.resume(),它们也是废弃方法,因为suspend()方法在导致线程暂停的同时,不会释放任何锁资源,会发生死锁。如果resume()在suspend()前执行,被挂起的线程可能很难有机会被继续执行。

7.等待线程结束和谦让
 Thread.join()有两个方法,无参的表示无限等待,它会一直阻塞当前线程,直到目标线程执行完毕。有时间参数的表示最大等待时间,如果超过给定时间目标线程还在执行,当前线程会继续往下执行。join方法就相当于插队,现在有线程t1正在执行,然后执行t2.join()会让t2插队去执行,若是无时间等待,则要等t2执行完才能让t1恢复执行,若是有时间等待,则等时间结束后t2没有结束,也会让t1继续执行。
 join()方法的本质是,让调用线程wait()方法在当前线程对象实例上。
 Thread.yield()方法,执行后它会使当前线程让出CPU,让出CPU后,它还是会进行CPU资源的争夺,能否被再次分配到就不一定了。如果觉着一个线程不那么重要,或者优先级比较低时,就可以适当调用Thread.yield()方法,给其他重要线程更多的工作机会。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

loser与你

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值