循环开启线程,参数输出有误

问题描述

大家好,最近在弄线程写了下面的测试程序

Thread[]ts=newThread[8];for(inti=1;i<=8;i++){ts[i-1]=newThread(()=>{BeginDo3(i);});ts[i-1].IsBackground=true;ts[i-1].Start();}stringss=sql;其中sql是一个全局变量这是调用的方法privatestaticvoidBeginDo3(objecti){sql+="参数="+i+"rn";}发现传入的参数有重合比如参数=1参数=2参数=2参数=4参数=5参数=6参数=6参数=8想请教下各位这是怎么一回事

解决方案

解决方案二:
由于匿名委托闭包的问题,在4.0的版本下是在调用的时候才取值,简单来说就是你线程开始运作了才会取i的值。4.5改进了这个地方。在4.0下,建议使用如下方式inttemp=i;循环里用到i的地方都用temp来代替。

时间: 2024-10-27 02:44:08

循环开启线程,参数输出有误的相关文章

handler-Android。在无限循环的线程中创建Message对象,无限出现GC调用。

问题描述 Android.在无限循环的线程中创建Message对象,无限出现GC调用. 我在Android开发中.开启了一个线程,这个线程是无限循环的.并且在这个线程里,我通过创建Handle的Message对象,然后handler.sendMessage(msg).可是这样一来,LOGCat上就一直出现GC_CONCURRENT.请问我该怎么修改代码,或者用哪种方式才能即实现功能,又能减少GC的调用.具体代码如下://线程private class getData_thread extends

关于多线程问题(新开启的线程里面再开启线程)

问题描述 先说下流程:首先运行主方法MainFun()这个方法会开启5个线程,每个线程调用DoSomething这方法,在DoSomething这个方法里面又会再开启线程(可能会开启多个),然后分别调用A.B.C.D.E5个方法.现在的问题是,我测试的时候,我用一个按钮的单击事件调用MainFun(),发现有时候程序会崩溃(什么错都不报直接关闭了),有时候正常运行,如果我按钮点快了是100%程序会崩溃的.求解决,多线程不会,改怎么解决,还是我写的有问题?主要代码如下:privatevoidMai

python中如何对类的成员函数开启线程?

问题描述 python中如何对类的成员函数开启线程? 单独对某个函数开启线程是可以的,比如下面的代码: import threading import thread import time def doWaiting(): print 'start waiting:', time.strftime('%H:%M:%S') time.sleep(3) print 'stop waiting', time.strftime('%H:%M:%S') thread1 = threading.Thread

c-bat批处理循环执行带参数的exe

问题描述 bat批处理循环执行带参数的exe 代码如下 @echo off FOR /L %%i IN (1,1,100) DO ( cd /d E:LTP_workltp-win-3.3.1 ltp_test --input C:UsersadminDesktopIOIO%%i.txt --segmentor-lexicon C:UsersadminDesktopdict.txt>C:UsersadminDesktopxmlltp%%i.xml ) ltp是哈工大的分词二进制版本,这里我要循环

android-Activity中开启线程进行耗时操作,怎么在Activity销毁时结束正在进行的线程

问题描述 Activity中开启线程进行耗时操作,怎么在Activity销毁时结束正在进行的线程 如题,在Android开发中,在activity中开启线程去执行耗时操作,有时候任务还没执行完Activity就被关闭了,有没有大神指导怎么在activity关闭的时候也杀死线程!有时候是多个线程使用线程池管理,怎么在activity销毁时关闭线程池里的所有线程!求高手指点迷津! 解决方案 1.线程里必须有办法退出 2.onResume里建立线程 3.onPause里设置线程结束标志结束线程 解决方

asp.net application_start事件里开启线程的问题

问题描述 各位好,目前项目需要做一个数据同步的功能,而且是自动同步.我在application_start事件中添加了如下代码:protectedvoidApplication_Start(){.....//读取配置等代码AreaRegistration.RegisterAllAreas();//默认情况下对EntityFramework使用LocalDBDatabase.DefaultConnectionFactory=newSqlConnectionFactory(@"DataSource=

c++-只有max循环时程序运行正常,当我把求最小值加入循环时,程序输出的数字变得很大很大,可以帮我看看吗?谢谢

问题描述 只有max循环时程序运行正常,当我把求最小值加入循环时,程序输出的数字变得很大很大,可以帮我看看吗?谢谢 #include using namespace std; int main() { int a[5],i,max,min; for(i=0;i<=4;i++) { cin>>a[i]; } for (i=0;i<=4;i++) { if(a[i]>a[i++]) {max=a[i];min=a[i++];} else {max=a[i++];min=a[i++

MFC多线程并发怎么按照线程顺序输出返回值?

问题描述 MFC多线程并发怎么按照线程顺序输出返回值? 多线程MFC程序,并发执行后分别按照顺序来返回结果,主线程接收这些返回值并且输出.显示,怎么做? 解决方案 你可以用信号量,让主线程等待子线程完成,用WaitForMultipleObjects WaitForSingleObjects函数 解决方案二: 可以用事件做线程同步.

请问使用两个线程分别输出100以内的奇数和偶数,并按从小到大的顺序输出如何操作?

问题描述 ]public synchronized void run(){oushu();qishu();}public void oushu(){ //偶数for (int i = 0; i < 101; i++) {if(i%2==0){System.out.println(Thread.currentThread().getName()+i);}}}public void qishu(){ //奇数for (int i = 0; i < 101; i++) {if(i%2!=0){引用