πΒ μ€λ μ½μ λ²μ : 13. λμμ±(235~244p)
μ½λμ wait(), sleep(), yield(), priority() ν¨μλ₯Ό μΆκ°
public synchronized String nextUrlOrNull() {
if (hasNext()) {
String url = urlGenerator.next();
Thread.yield(); // ν
μ€νΈλ₯Ό μν΄ μΆκ°λμλ€. updateHasNext();
return url;
}
return null;
}
λ¬Έμ μ
AOF, CGLIB, ASM κ°μ λꡬ νμ©
public class ThreadJigglePoint {
public static void jiggle() {}
}
public synchronized String nextUrlOrNull() {
if (hasNext()) {
ThreadJigglePoint.jiggle();
String url = urlGenerator.next();
ThreadJigglePoint.jiggle();
updateHasNext();
ThreadJigglePoint.jiggle();
return url;
}
return null;
}
ThreadJigglePoint.jiggle();μ 무μμλ‘ sleep μ΄λ yield λ₯Ό νΈμΆ νΉμ μ무λμλ νμ§μμ(nop)
λ°°ν¬ μ μ μ κ±°νκΈ° μμν¨