多线程 线程如何关闭

问题描述

publicstaticboolFtpDownLoadMulti(List<string>remoteFiles,stringpath,Action<int,int>updateProgress){Dictionary<Thread,ProgressInfo>infos=newDictionary<Thread,ProgressInfo>();foreach(stringsinremoteFiles){stringfile=s;ProgressInfopi=newProgressInfo();string[]e=file.Split('/');pi.localFile=e[e.Length-1];pi.remoteFile=file;Threadt=newThread(newThreadStart(delegate(){FtpDownLoad(file,path+e[e.Length-1],true,pi.ProgressCallBack);}));t.Start();infos.Add(t,pi);}try{intupdated=0,all=1;while(infos.Count>0){Monitor.Enter(infos);System.Threading.Thread.Sleep(500);updated=0;all=1;foreach(varitemininfos){updated+=item.Value.updatedBytes;all+=item.Value.totalBytes;}if(updateProgress!=null){updateProgress(updated,all);}if(updated==all){foreach(varitemininfos){item.Key.Abort();}infos.Clear();}Monitor.Exit(infos);}returntrue;}catch(Exceptione){Debug.LogException(e);returnfalse;}}

解决方案

解决方案二:
百度一下,你就知道~~~
解决方案三:
#1百度到了我就不到这求助了
解决方案四:
又死循环、同时又阻塞,这种程序我们决不允许使用的。
解决方案五:
线程能挂起就别关。进程退出才安全。
解决方案六:
这不是死循环吧?
解决方案七:
楼上的大哥可以提供可行的写法吗?小弟刚开始使用多线程,用的不好。请直接提出来,同时请给出正确方案或思路建议,谢谢了
解决方案八:
如果你不知道如何写出比较可行的并发多线程程序,那么建议你i就不要纠结于低层的编程语句。你可以使用比较高级的框架,例如PLinq()。当年使用低层的编程语句时,你纠结的东西就很多了。有些人总是认为“越是底层的东西越厉害”,其实十有八九都会因为他刚好学了“半桶水”因此才喜欢纠结于底层技术。如果你高效率地开发大系统,往往回归比较高生产率的编程开发方式,而不是写一大坨过于底层的代码。
解决方案九:
滥用死循环跟滥用多种阻塞方法(你用了至少2、3种)必定是伴生的,这种纠结在一起的东西,造成了你的软件的效率甚至可能连单线程的程序都不如,而且你的cpu被占用得厉害,电脑根本不能做更多的分时任务了。编写并发多线程程序,首先要把基本原则搞懂,就是要无谓的避免阻塞和循环,要从逻辑设计上下功夫重构。对你写的那类程序来说,线程会让系统更慢更卡,线程反而成了“坑”了。
解决方案十:
就是要无谓的避免阻塞和循环-->就是要避免无谓的阻塞和循环
解决方案十一:
上边的代码就是循环检测同时回传进度updateProgress(updated, all);,达到条件if(updated==all)就退出,并且释放线程。sp老大说的PLinq也许是一个封装的很好的多线程查询工具,但是我现在并不需要。希望我以上的代码以及写的思路做一些实质性的改进意见。小弟万分感谢

时间: 2024-08-22 10:03:37

多线程 线程如何关闭的相关文章

java 多线程-线程通信实例讲解_java

线程通信的目标是使线程间能够互相发送信号.另一方面,线程通信使线程能够等待其他线程的信号. 通过共享对象通信 忙等待 wait(),notify()和 notifyAll() 丢失的信号 假唤醒 多线程等待相同信号 不要对常量字符串或全局对象调用 wait() 通过共享对象通信 线程间发送信号的一个简单方式是在共享对象的变量里设置信号值.线程 A 在一个同步块里设置 boolean 型成员变量 hasDataToProcess 为 true,线程 B 也在同步块里读取 hasDataToProc

linux C 多线程/线程池编程 同步实例

在多线程.线程池编程中经常会遇到同步的问题. 1.创建线程 函数原型:int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *arg); 参数:thread指向线程id的指针:attr指向线程属性的指针:第三个为执行的方法的函数指针:arg指向给方法传递的参数的指针. 2.互斥变量 (1)互斥变量  pthread_mutex_t (2)互斥变量

多线程中操作数据库,resultset还未结束当前操作,己被另一个线程提前关闭而出错

问题描述 先来看我的线程 private DataHandle dh = new DataHandle(); public synchronized void runTask() { try { dh.handle(pbean.getStartNo(), pbean.getEndNo()); } catch (Exception e) { e.printStackTrace(); // TaskManagerBean.returnItem(); } 这个是我的线程,里面用到一个叫DataHand

彻底明白Java的多线程-线程间的通信

线程间的通信 1. 线程的几种状态 线程有四种状态,任何一个线程肯定处于这四种状态中的一种: 1) 产生(New):线程对象已经产生,但尚未被启动,所以无法执行.如通过new产生了一个线程对象后没对它调用start()函数之前. 2) 可执行(Runnable):每个支持多线程的系统都有一个排程器,排程器会从线程池中选择一个线程并启动它.当一个线程处于可执行状态时,表示它可能正处于线程池中等待排排程器启动它:也可能它已正在执行.如执行了一个线程对象的start()方法后,线程就处于可执行状态,但

新手学JAVA(十)-多线程----线程的创建和启动

Java使用Thread类代表线程,所有的线程对象都必须是Thread类或者其子类的实例.每个下次你哼的作用是完成一定的任务,实际上就是执行一段程序流(一段顺序执行的代码).Java使用线程执行体来代表这段程序流     在Java线程的创建有三种方式      通过继承Thread类创建线程类 步骤如下 定义Thread类的子类,并重写该类的run()方法,该run()方法的方法体就代表了线程需要完成的任务.因此把run()方法称为线程执行体. 创建Thread子类的实例,即创建了线程的对象.

多线程-线程相关问题。。。。。。

问题描述 线程相关问题...... Java多线程的使用场景,感觉在开发中一直使用不到,求大神解答. 解决方案 多线程是开发中经常会用到的东西,怎么会用不到呢? 解决方案二: 线程相关Android中Handler,线程相关问题dot Net 线程相关问题 解决方案三: 怎么会用不到呢?一般的web项目都涉及到多线程的啊.java web项目的请求处理都是多线程的,就是简单的注册操作也涉及到线程安全问题的.参考:http://blog.csdn.net/wojiushiwo945you/arti

C# 多线程 线程内部是否改变本线程的优先级

问题描述 C#多线程,是否可以在某一线程内部改变本线程的优先级,使得该线程中某段代码执行的是否独占cpu?而不被其他线程抢占.或者有没有其他方法可以使得线程中某段代码执行的时候,独占CPU.谢谢! 解决方案 解决方案二:独占的意义是什么?如果其他线程依赖某个线程的运行结果,可以使用信号量来实现多线程同步解决方案三:引用楼主huazi113888的回复: C#多线程,是否可以在某一线程内部改变本线程的优先级,使得该线程中某段代码执行的是否独占cpu?而不被其他线程抢占.或者有没有其他方法可以使得线

SWT 关闭窗口后 非UI线程如何关闭?

问题描述 刚刚开始学SWT,有个问题不知道如何解决public static void main(String[] args) {try {ClientLoginWindow window = new ClientLoginWindow();window.open();} catch (Exception e) {e.printStackTrace();}}public void open() {Display display = Display.getDefault();createConte

Java基础-23总结多线程,线程实现Runnable接口,线程名字获取和设置,线程控制,线程安全,同步线程

你需要的是什么,直接评论留言. 获取更多资源加微信公众号"Java帮帮" (是公众号,不是微信好友哦) 还有"Java帮帮"今日头条号,技术文章与新闻,每日更新,欢迎阅读 学习交流请加Java帮帮交流QQ群553841695 分享是一种美德,分享更快乐! 1:多线程(理解) (1)多线程:一个应用程序有多条执行路径 进程:正在执行的应用程序 线程:进程的执行单元,执行路径 单线程:一个应用程序只有一条执行路径 多线程:一个应用程序有多条执行路径 多进程的意义? 提高