有时效的 join 若等待的时间超过线程执行的时间,那么在线程执行完之后就后执行后边了,不会等到设置的时间。
static int r1 = 0; static int r2 = 0; public static void main(String[] args) throws InterruptedException { test3(); } public static void test3() throws InterruptedException { Thread t1 = new Thread(() -> { sleep(1); r1 = 10; }); long start = System.currentTimeMillis(); t1.start(); // 线程执行结束会导致 join 结束 t1.join(1500); long end = System.currentTimeMillis(); log.debug("r1: {} r2: {} cost: {}", r1, r2, end - start); } 20:48:01.320 [main] c.TestJoin - r1: 10 r2: 0 cost: 1010 static int r1 = 0; static int r2 = 0; public static void main(String[] args) throws InterruptedException { test3(); } public static void test3() throws InterruptedException { Thread t1 = new Thread(() -> { sleep(2); r1 = 10; }); long start = System.currentTimeMillis(); t1.start(); // 线程执行结束会导致 join 结束 t1.join(1500); long end = System.currentTimeMillis(); log.debug("r1: {} r2: {} cost: {}", r1, r2, end - start); } //20:52:15.623 [main] c.TestJoin - r1: 0 r2: 0 cost: 1502
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/291110.html