多线程杂记

Java中线程的生命周期有6种,操作系统层面有5种。

线程的启动start(),调用的是本地方法start0(),JVM层面实现的。JVM调操作系统创建线程,启动线程,操作系统调用run()方法,JVM调用run()方法。操作系统通过调度算法,去调度CPU执行。执行结束后,JVM对线程进行销毁。

线程的终止,线程执行结束。线程有个中断标记,默认为false,interrupt()方法改变中断标记,某些情况下可以让线程自己处理外部中断。如果线程处于阻塞状态下,interrupt()方法会唤醒线程。wait()、sleep()等方法都会抛出InterruptedException,并清除中断标记,即恢复为默认false。

@throws  InterruptedException if any thread interrupted the
     *             current thread before or while the current thread
     *             was waiting for a notification.  The <i>interrupted
     *             status</i> of the current thread is cleared when
     *             this exception is thrown.

出现中断异常时,线程可能还没终止,如果要让线程终止,可以在捕获异常的时候通过Thread.currentThread().interrupt();终止线程。

线程间的通信(wait/notify):多个线程执行的时候,如果一个线程需要等到另外的线程执行后才执行,可以使用wait使线程阻塞,进入等待队列,等另外的线程执行结束后通过notify唤醒进入同步队列(可以抢占锁)。线程间的通信的前提是,这些线程需要抢占同一把锁,获得锁的线程调用notify唤醒处于等待队列的线程。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值