关于for 循环里 线程执行顺序问题

最近在做项目时遇到了 这样的需求 要在一个for循环里执行下载的操作, 而且要等 下载完每个 再去接着走循环。上网查了一些 觉得说的不是很明确。现在把我用到的代码 贴上 希望可以帮到有此需求的开发者        private Handler mHandler = new Handler() {
               public void handleMessage(android.os.Message msg) {
                       switch (msg.what) {http://www.huiyi8.com/tab/
                          //访问完网络 走此分支 将锁打开
                         case Constants.DOWN_TEST:
                                synchronized(object){                        object.notifyAll();                }
                                break;

//访问网络
                          case Constants.FINISH:                        
                                ServerDateUtil.getInstance(context, mHandler,
                                                application).downTestPic(
                                                application.getNoPortURL(context) + test,
                                                        FileUtils.getPathOfTest() + "/" + sysID
                                                                + ".jpg", map, happyID);
                                        
                                break;
                        default:
                                break;
                        }

}
        };

private Object object = new Object();

@Override
        public void run() {tab标签

for (int i = 0; i < application.getLIST().size(); i++) {
                        synchronized(object){
                        messageString = TestUtil.getInstance(context, application)
                                        .getMsgByHappyID(application.getLIST().get(i));
                        happyID = application.getLIST().get(i);
                        map = ResourceUtil.getMap(messageString);
                        if (map != null) {
                                SQLiteDB.single(context).saveData(map);
                                getMsg(map);
                                 //发送通知 在handler 里执行访问网络的方法
                                Message message = new Message();
                                message.what = Constants.FINISH;
                                mHandler.sendMessage(message);
                               //执行下面的语句  循环进入等待
                                try {
                                        object.wait();
                                } catch (InterruptedException e) {
                                        e.printStackTrace();
                                }
                        }
                        }
                }

关于for 循环里 线程执行顺序问题,布布扣,bubuko.com

时间: 2024-08-06 02:16:40

关于for 循环里 线程执行顺序问题的相关文章

Java多线程系列四——控制线程执行顺序

假设有线程1/线程2/线程3,线程3必须在线程1/线程2执行完成之后开始执行,有两种方式可实现 Thread类的join方法:使宿主线程阻塞指定时间或者直到寄生线程执行完毕 CountDownLatch类:指定计数器,当计数器清零即取消阻塞 import java.util.concurrent.CountDownLatch; import org.junit.Assert; import org.junit.Test; /** * @Description: 规定线程次序的方法 */ publ

gcd 控制线程执行顺序(供参考)

dispatch_group_t group = dispatch_group_create(); dispatch_group_async(group, dispatch_get_global_queue(0,0), ^{ // 并行执行的线程一 }); dispatch_group_async(group, dispatch_get_global_queue(0,0), ^{ // 并行执行的线程二 }); dispatch_group_notify(group, dispatch_get_

使用 CountDownLatch 控制多个线程执行顺序

有时候会有这样的需求,多个线程同时工作,然后其中几个可以随意并发执行,但有一个线程需要等其他线程工作结束后,才能开始.举个例子,开启多个线程分块下载一个大文件,每个线程只下载固定的一截,最后由另外一个线程来拼接所有的分段,那么这时候我们可以考虑使用CountDownLatch来控制并发. CountDownLatch是JAVA提供在java.util.concurrent包下的一个辅助类,可以把它看成是一个计数器,其内部维护着一个count计数,只不过对这个计数器的操作都是原子操作,同时只能有一

main入口方法中创建线程执行顺序的问题

1 public static void main(String args[]) { 2 3 4 Thread t1=new Thread(){ 5 public void run(){ 6 System.out.println("1"); 7 } 8 }; 9 Thread t2=new Thread(){ 10 public void run(){ 11 System.out.println("2"); 12 } 13 }; 14 t1.run(); 15 t2

关于CountDownLatch控制线程的执行顺序

在上一篇文章中说过使用thread.join()方法.newSingleThreadExecutor单线程池来控制线程执行顺序.在文章的末尾我提出了一种构想,可否使用经典的生产者和消费者模型来控制执行顺序.在本文中,我将使用CountDownLatch来解决这个问题. 上图是countDownLatch的原理示意图.官方文档给出的解释是:CountDownLatch是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程执行完后再执行.上图中线程A调用方法await()之后,进行阻塞,然后线

JS循环嵌套的执行原理

[逆战班] 循环嵌套是指在一个循环语句中再定义一个循环语句的语法结构,外循环执行一次,内循环全部执行完,直到外循环执行完毕,整个循环结束. while.do.. while和for循环语句都可以进行嵌套,并且他们之间可以进行互相嵌套.最常见的是在for循环中嵌套for循环.格式如下: for (循环变量初始值; 循环条件; 步长) { 循环体 ....... for (循环变量初始值; 循环条件; 步长) { 循环体 ........ } } 例子一: 利用循环嵌套输出一个金字塔形状的三角形:

Jmeter -- 循环控制器和线程并发(关注执行顺序)

测试计划中包含两个线程组,分别设置如下: 线程组1:线程数为2,循环次数为4 线程组2:线程数为4 执行顺序 监听器View Results in Table(用表格查看结果)中,ThreadName列,n-m,其中n指线程组号,m指线程号例如:1-1,指第一个线程组中的第一个线程    1-2,指第一个线程组中的第二个线程    2-1,指第二个线程组中的第一个线程    2-4,指第二个线程组中的第四个线程每个线程下的请求,按顺序执行,有循环的在循环内按顺序执行 两个线程组都有四个请求,请求

C#之使用AutoResetEvent实现线程的顺序执行

前几天一朋友问我如何实现线程的顺序执行,说真的,虽然看过CLR这本书,也把线程部分拜读了两遍,但是这个问题出来之后还是没有一个思路.今天在搜索资料的时候无意中再次看到AutoResetEvent这个东西,当然我知道它是和线程有关,用于处理线程切换之类的(可能在测试Demo之前理解有误),于是决定用AutoResetEvent来处理上面的问题. 这里以园区一个园友的例子来说明,这个例子就是 买书-->付款-->拿书这个过程,该过程会持续n(通过变量设置)次,并且每一次都要按照顺序执行,有可能有同

让线程按顺序执行8种方法

实现我们下面需要完成这样一个应用场景: 1.早上:2.测试人员.产品经理.开发人员陆续的来公司上班:3.产品经理规划新需求:4.开发人员开发新需求功能:5.测试人员测试新功能. 规划需求,开发需求新功能,测试新功能是一个有顺序的,我们把thread1看做产品经理,thread2看做开发人员,thread3看做测试人员. 1.使用线程的join方法 join():是Theard的方法,作用是调用线程需等待该join()线程执行完成后,才能继续用下运行. 如果想学习Java工程化.高性能及分布式.深