thread
文章平均质量分 77
csatang
这个作者很懒,什么都没留下…
展开
-
线程状态是五种还是六种
当调用LockSupport.unpark方法或者调用线程的interrupt(),会让目标线程从WAITING–>RUNNABLE。当前线程调用LockSupport.park()方法的时候会让当前线程从RUNNABLE–>WAITING。调用obj.wait(long n)方法时,t线程从RUNNABLE --> TIMED_WAITING。当当前线程的所有代码执行完成之后,表示线程已经执行完毕,生命周期已经结束了,不会再转换为其他状态.t线程用synchronized(obj) 获取了对象锁之后。原创 2023-05-12 19:01:36 · 646 阅读 · 0 评论 -
Java中线程的状态
Thread.yield(),一定是当前线程调用此方法,当前线程放弃获取的CPU时间片,但不释放锁资源,由运行状态变为就绪状态,让OS再次选择线程。thread.join()/thread.join(long millis),当前线程里调用其它线程t的join方法,当前线程进入WAITING/TIMED_WAITING状态,当前线程不会释放已经持有的对象锁。线程一旦终止了,就不能复生。当前线程sleep()方法结束,其他线程join()结束,等待用户输入完毕,某个线程拿到对象锁,这些线程也将进入就绪状态。原创 2023-05-11 19:08:37 · 721 阅读 · 0 评论 -
notify()和notifyAll()有什么区别?
等待池:假设一个线程A调用了某个对象的wait()方法,线程A就会释放该对象的锁后,进入到了该对象的等待池,等待池中的线程不会去竞争该对象的锁。锁池:只有获取了对象的锁,线程才能执行对象的 synchronized 代码,对象的锁每次只有一个线程可以获得,其他线程只能在锁池中等待。notifyAll() 唤醒对象的等待池中的所有线程,进入锁池。结果:仅调用一次 obj.notify(),线程 t1 或 t2 中的一个始终在等待被唤醒,程序不终止。把 t3 注掉,启动 t4 线程。原创 2023-05-11 17:48:10 · 71 阅读 · 0 评论