JAVA 中ABS的整理及学习

本文详细介绍了Java中线程的阻塞、等待状态,以及Thread的start()、sleep()、yield()、interrupt()等方法的作用。重点解析了interrupt()方法的工作原理,通过示例展示了如何中断线程。此外,还简单提及了AQS(AbstractQueuedSynchronizer)在独占和共享模式下的资源管理,并以ReentrantLock和ReentrantReadWriteLock为例进行了说明。
摘要由CSDN通过智能技术生成

  1. 先了解线程Thread的基本知识

  1. 阻塞和等待

阻塞:当一个线程A试图获取对象锁(JUC库中的锁,即Syncronized),而该锁被线程B持有,则A线程进入阻塞状态,它的特点是使用简单,由JVM调度器来决定唤醒自己,而不需要另一个线程显式唤醒自己,不响应中断。

 

等待:当线程A等待线程B通知调度器一个条件时,则A进入等待状态。它的特点是需要等待另一个线程B显式唤醒自己,实现灵活,可响应中断,例如:Object.wait(),Thread.join()以及等待LockCondition

 

需要强调的是SynchronizedJUC里的lock都实现锁的功能,但线程的状态不一样,Synchronized会让线程进入阻塞状态,而JUCLock是用LockSupport.park()/unpark()来实现阻塞/唤醒,让线程进入等待状态,虽然两者的状态不一样,但是被唤醒后又都进入Runnable状态,结果是一样的。

 

  1. Start():新启一个线程只能start一次,主要通过调用nativestart0()来实现,当启动一个线程时,意味着该线程获得了CPU执行时间

    Sleep(): 相当于让线程A休眠,交出CPU,让CPU去干别的事,但是此时A如果已持有锁,是不会释放锁的,其他线程B是不能访问这个对象的

    yield():也是交出cpu,让cpu去干别的事,唯一和sleep的区别是调用这个方法后,是不会让线程进去阻塞状态的,而是让线程重回就绪状态。

    interrupt():简单的理解就是让线程停止。

 

在看interrupt()的时候,仅仅看表面的意思,没理解透,于是用下面的例子来解释下:

public class ShowLoadProcess implementsRunnable{

        

         privatevolatile static boolean on = false;       

        

         publicstatic void main(String[] args) throws InterruptedException

         {

         //               Thread testThread = newThread(new ShowLoadProcess(),"InterruptionInJava");

         //               testThread.start();

         //              

         //               System.out.println(Thread.currentThread().getName()+ "  2222");

         //               Thread.sleep(1000);

         //              

         //               ShowLoadProcess.on = true;

         //              

         //               testThread.interrupt();

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值