一、中断的理解
1、中断好比其他线程对该线程打招呼,其他线程可以通过该线程的interrupt()方法对其进行中断操作.
2、线程通过方法isInterrupted()来进行判断是否被中断,也可以通过静态方法Thread.interrupted()对当前线程的中断标识位进行复位.
3、如果该线程已经处于终结状态,即使该线程被中断过,在调用该线程对象的isInterrupted()时依旧返回false.
4、许多声明抛出InterruptedException的方法(例如 Thread.sleep(1000)方法)这些方法在抛出InterruptedException之前,java虚拟机会将该线程的中断标识位清除,然后抛出InterruptedException,此时调用isInterrupted()方法将返回false.
5、中断是线程间交互方式,适合用来取消或停止任务.还可以利用boolean变量控制是否停止任务并终止该线程..这两种方式能够使线程在终止时有机会清理资源,而不是武断的将线程停止. 二、synchronized的理解
1、class信息看,同步块的实现使用了monitorenter和monitorexit指令,而同步方法依靠方法修饰符上的ACC_SYNCHRONOZED来完成
三、线程api
Thread.yield() 方法用于提示线程调度器让出CPU执行时间,以增加其他线程执行的机会。它是一种协作式的多任务处理机制,用于帮助线程之间的公平调度.Thread.yield() 方法不会释放锁。如果线程在持有锁的情况下调用 yield(),它仍将保持锁,其他线程将无法进入同步块.并不保证其他线程会立即获得CPU时间,但它增加了其他具有相同优先级的线程被执行的机会