interrupt()
今天写Thread.stop()的时候,发现上面多了条横线,说明stop()方法已经淘汰了,相应替代它的是interrupt(), 调用方法会把给线程一个中断信号,并不是线程立马销毁,而是让他自己确定什么时候销毁(在当前线程阻塞的时候结束此线程)
-
练手
有10个同学在唱歌, 但其中有一个名为 “同学6” 的同学在摇花手, 我们想让他摇完这次花手,下一次不要再摇花手了
public class JUCApplication { public static void main(String[] args) throws InterruptedException { for (int i = 0; i < 10; i++) { new Thread(new Runnable() { @Override public void run() { try { while (true){ if ("同学6".equals(Thread.currentThread().getName())){ System.out.println(Thread.currentThread().getName()+"=====摇花手"); }else { System.out.println(Thread.currentThread().getName()+"=====唱歌"); } TimeUnit.SECONDS.sleep(2); } } catch (InterruptedException e) { // e.printStackTrace(); } } },"同学"+i).start(); } //主线程设置延迟,防止同学6这个线程没有创建出来就执行以下程序 TimeUnit.SECONDS.sleep(10); //获取所有正在跑的线程 Map<Thread, StackTraceElement[]> allStackTraces = Thread.getAllStackTraces(); List<Thread> collect = new ArrayList<>(allStackTraces.keySet()); collect.forEach(i-> { //找到 "同学6" 线程,让他在摇完花手时候不再摇花手 if ("同学6".equals(i.getName())){ i.interrupt(); } }); } }