84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
for(Object i: items){ new Task(new Callback(){ @Override public void finish() { //todo } }).run(); }
就以上代码,如何在finish方法中退出for循环,求教!
人生最曼妙的风景,竟是内心的淡定与从容!
给里外层设置个公用开关,里层跳出后,外层也中断.
贴个代码吧,公共开关的思路。
public class TestMain { public volatile static boolean flag = false; public static void main(String[] args) { for (int index = 0; index < 100; index++) { if (flag) { System.out.println("我要退出了,这时候i是:" + index); break; } else { Task task = new Task(index); Thread thread = new Thread(task); thread.setName("线程"+index); thread.start(); try { Thread.sleep(50); } catch (InterruptedException e) { e.printStackTrace(); } } } } }
public class Task implements Runnable{ private Integer i; Task(Integer i){ this.i = i; } public void run() { System.out.println("我是"+Thread.currentThread().getName()); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } if(i == 10){ TestMain.flag = true; } } }
仅供参考
不是同步的,没办法从finish函数中直接中断。你可以设置个标记或是其他什么方法了
finish
是同步的,但没法直接中断。
赞成楼上的思路 用公共开关
自定义个异常抛出
赞成二次元李健的回答,可以考虑设置标志变量
你这么写应该是对CyclicBarrier不熟悉吧
CyclicBarrier
给里外层设置个公用开关,里层跳出后,外层也中断.
贴个代码吧,公共开关的思路。
仅供参考
不是同步的,没办法从
finish
函数中直接中断。你可以设置个标记或是其他什么方法了是同步的,但没法直接中断。
赞成楼上的思路 用公共开关
自定义个异常抛出
赞成二次元李健的回答,可以考虑设置标志变量
你这么写应该是对
CyclicBarrier
不熟悉吧