java-4:Thread线程

java-4:Thread线程


1、怎么去创建线程??

 a、使用Thread类(注意这个类也是实现了Runnable接口)
 b、使用Runnable接口

2、线程的生命周期

 a、新建状态:在堆中分配了内存
 b、就绪状态:调用start方法进入就绪状态,线程进入池中,等待获取cpu使用权。
 c、运行状态:占用cpu,执行代码。
 d、阻塞状态:java虚拟机不会给它分配cpu,当其从阻塞过渡到就绪状态的时候就有机会获取cpu了。
  i、池中阻塞:当线程执行的过程中,执行了wait方法就会在池中等待。
  ii、锁阻塞:当线程处于运行状态时,试图获得某个对象的同步锁时,如果该对象的同步锁已经被其他的线程占用,JVM就会把这个线程放到这个对象的琐池中。
  iii、其他阻塞:当前线程执行了sleep()方法,或者调用了其它线程的join()方法,或者发出了I/O请求时,就会进入这个状态中。

3、挂起或唤醒线程

  一但线程开始执行run方法,就会一直到这个run方法执行完成这个线程才退出。但在线程执行的过程中,可以通过两个方法使线程暂时停止执行。这两个方法是suspend和sleep。在使用suspend挂起线程后,可以通过resume方法唤醒线程。而使用sleep使线程休眠后,只能在设定的时间后使线程处于就绪状态(在线程休眠结束后,线程不一定会马上执行,只是进入了就绪状态,等待着系统进行调度)。suspend方法是不释放锁虽然suspend和resume可以很方便地使线程挂起和唤醒,但由于使用这两个方法可能会造成一些不可预料的事情发生,因此,这两个方法被标识为  deprecated(弃用)标记,这表明在以后的jdk版本中这两个方法可能被删除,所以尽量不要使用这两个方法来操作线程。

4、终止线程

有三种方法可以使终止线程。
  1. 使用退出标志,使线程正常退出,也就是当run方法完成后线程终止。
  2. 使用stop方法强行终止线程(线程中调用了阻塞代码)(这个方法不推荐使用,因为stop是依靠抛出异常来结束线程的,也可能发生不可预料的结果)。如果没有调用阻塞代码,可以正常结束线程。
  3. 使用interrupt方法中断线程(线程中调用了阻塞代码)(其实这种方法也是通过抛出异常来结束线程的)。如果没有调用阻塞代码,可以通过判断线程的中断标志位来介绍线程。

5、线程的几个方法

join():等待此线程死亡后再继续,可使异步线程变为同步线程,join方法是不会释放锁****interrupt():中断线程,被中断线程会抛InterruptedExceptionwait():等待获取锁:表示等待获取某个锁执行了该方法的线程释放对象的锁,JVM会把该线程放到对象的等待池中。该线程等待其它线程唤醒 notify():执行该方法的线程唤醒在对象的等待池中等待的一个线程,JVM从对象的等待池中随机选择一个线程,把它转到对象的锁池中。使线程由阻塞队列进入就绪状态sleep():让当前正在执行的线程休眠,有一个用法可以代替yield函数——sleep(0)yield():暂停当前正在执行的线程对象,并执行其他线程。也就是交出CPU一段时间(其他同样的优先级或者更高优先级的线程可以获取到运行的机会)sleep和yield区别:1、sleep()方法会给其他线程运行的机会,而不考虑其他线程的优先级,因此会给较低线程一个运行的机会;yield()方法只会给相同优先级或者更高优先级的线程一个运行的机会。 2、当线程执行了sleep(long millis)方法后,将转到阻塞状态,参数millis指定睡眠时间;当线程执行了yield()方法后,将转到就绪状态。 3、sleep()方法声明抛出InterruptedException异常,而yield()方法没有声明抛出任何异常 4、sleep()方法比yield()方法具有更好的移植性

6、让一个线程给另一个线程先行的方法

  1、调整各个线程的优先级
  2、让处于运行状态的线程调用Thread.sleep()方法
  3、让处于运行状态的线程调用Thread.yield()方法
   4、让处于运行状态的线程调用另一个线程的join()方法

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值