线程join具体的效果
package com.wucj.service.thread;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* \* Created with IntelliJ IDEA.
* \* @author: wucj
* \* @date: 2020/3/22 21:25
* \* @description:
* \
*/
public class JoinUseThread implements Runnable{
private static Logger log = LoggerFactory.getLogger(JoinUseThread.class);
static class JumpRunable implements Runnable{
private Logger log = LoggerFactory.getLogger(this.getClass());
/** 被插队的线程 **/
private Thread preThread;
public JumpRunable(Thread preThread) {
this.preThread = preThread;
}
@Override
public void run() {
try {
preThread.join();
} catch (InterruptedException e) {
log.error("线程准备插入:{}失败",e);
}
log.info("线程:{}执行完毕",Thread.currentThread().getName());
}
}
@Override
public void run() {
while (!Thread.currentThread().isInterrupted()){
log.info("执行当前线程:{}",Thread.currentThread().getName());
}
}
public static void main(String[] args) {
int maxThread = 20;
Thread preThread = Thread.currentThread();
for (int i = 0; i < maxThread; i++) {
Thread thread = new Thread(new JumpRunable(preThread),String.valueOf(i));
log.info("被插入线程:{},插入线程:{}",preThread.getName(),thread.getName());
thread.start();
preThread = thread;
}
ThreadSleep.seconds(3);
log.info("线程:{}执行完毕...",Thread.currentThread().getName());
}
}
22:45:01.724 [main] INFO com.wucj.service.thread.JoinUseThread - 被插入线程:main,插入线程:0
22:45:01.729 [main] INFO com.wucj.service.thread.JoinUseThread - 被插入线程:0,插入线程:1
22:45:01.729 [main] INFO com.wucj.service.thread.JoinUseThread - 被插入线程:1,插入线程:2
22:45:01.729 [main] INFO com.wucj.service.thread.JoinUseThread - 被插入线程:2,插入线程:3
22:45:01.729 [main] INFO com.wucj.service.thread.JoinUseThread - 被插入线程:3,插入线程:4
22:45:01.729 [main] INFO com.wucj.service.thread.JoinUseThread - 被插入线程:4,插入线程:5
22:45:01.730 [main] INFO com.wucj.service.thread.JoinUseThread - 被插入线程:5,插入线程:6
22:45:01.730 [main] INFO com.wucj.service.thread.JoinUseThread - 被插入线程:6,插入线程:7
22:45:01.730 [main] INFO com.wucj.service.thread.JoinUseThread - 被插入线程:7,插入线程:8
22:45:01.730 [main] INFO com.wucj.service.thread.JoinUseThread - 被插入线程:8,插入线程:9
22:45:01.730 [main] INFO com.wucj.service.thread.JoinUseThread - 被插入线程:9,插入线程:10
22:45:01.730 [main] INFO com.wucj.service.thread.JoinUseThread - 被插入线程:10,插入线程:11
22:45:01.730 [main] INFO com.wucj.service.thread.JoinUseThread - 被插入线程:11,插入线程:12
22:45:01.731 [main] INFO com.wucj.service.thread.JoinUseThread - 被插入线程:12,插入线程:13
22:45:01.731 [main] INFO com.wucj.service.thread.JoinUseThread - 被插入线程:13,插入线程:14
22:45:01.731 [main] INFO com.wucj.service.thread.JoinUseThread - 被插入线程:14,插入线程:15
22:45:01.731 [main] INFO com.wucj.service.thread.JoinUseThread - 被插入线程:15,插入线程:16
22:45:01.731 [main] INFO com.wucj.service.thread.JoinUseThread - 被插入线程:16,插入线程:17
22:45:01.731 [main] INFO com.wucj.service.thread.JoinUseThread - 被插入线程:17,插入线程:18
22:45:01.732 [main] INFO com.wucj.service.thread.JoinUseThread - 被插入线程:18,插入线程:19
22:45:01.735 [main] INFO com.wucj.service.thread.JoinUseThread - 线程:main执行完毕...
22:45:01.736 [0] INFO com.wucj.service.thread.JoinUseThread$JumpRunable - 线程:0执行完毕
22:45:01.736 [1] INFO com.wucj.service.thread.JoinUseThread$JumpRunable - 线程:1执行完毕
22:45:01.736 [2] INFO com.wucj.service.thread.JoinUseThread$JumpRunable - 线程:2执行完毕
22:45:01.736 [3] INFO com.wucj.service.thread.JoinUseThread$JumpRunable - 线程:3执行完毕
22:45:01.736 [4] INFO com.wucj.service.thread.JoinUseThread$JumpRunable - 线程:4执行完毕
22:45:01.736 [5] INFO com.wucj.service.thread.JoinUseThread$JumpRunable - 线程:5执行完毕
22:45:01.737 [6] INFO com.wucj.service.thread.JoinUseThread$JumpRunable - 线程:6执行完毕
22:45:01.737 [7] INFO com.wucj.service.thread.JoinUseThread$JumpRunable - 线程:7执行完毕
22:45:01.737 [8] INFO com.wucj.service.thread.JoinUseThread$JumpRunable - 线程:8执行完毕
22:45:01.737 [9] INFO com.wucj.service.thread.JoinUseThread$JumpRunable - 线程:9执行完毕
22:45:01.737 [10] INFO com.wucj.service.thread.JoinUseThread$JumpRunable - 线程:10执行完毕
22:45:01.737 [11] INFO com.wucj.service.thread.JoinUseThread$JumpRunable - 线程:11执行完毕
22:45:01.737 [12] INFO com.wucj.service.thread.JoinUseThread$JumpRunable - 线程:12执行完毕
22:45:01.737 [13] INFO com.wucj.service.thread.JoinUseThread$JumpRunable - 线程:13执行完毕
22:45:01.738 [14] INFO com.wucj.service.thread.JoinUseThread$JumpRunable - 线程:14执行完毕
22:45:01.738 [15] INFO com.wucj.service.thread.JoinUseThread$JumpRunable - 线程:15执行完毕
22:45:01.738 [16] INFO com.wucj.service.thread.JoinUseThread$JumpRunable - 线程:16执行完毕
22:45:01.738 [17] INFO com.wucj.service.thread.JoinUseThread$JumpRunable - 线程:17执行完毕
22:45:01.738 [18] INFO com.wucj.service.thread.JoinUseThread$JumpRunable - 线程:18执行完毕
22:45:01.738 [19] INFO com.wucj.service.thread.JoinUseThread$JumpRunable - 线程:19执行完毕
Disconnected from the target VM, address: '127.0.0.1:53496', transport: 'socket'
Process finished with exit code 0