CSDN第一期总结之三:Thread的问题

C#是一门支持多线程的语言,因此线程的使用也是比较常见的。由于线程的知识在Win32编程的时候已经说得过多,所以在.Net中很少介绍这部分(可能.Net不觉得这部分是它所特有的)。

 

那么线程相关的问题大致有如下四类(这篇文章只讨论单线程、单线程与UI线程这两方面的问题)。

问题一,线程的基本操作,例如:暂停、继续、停止等;

问题二,如何向线程传递参数或者从中得到其返回值;

问题三,如何使线程所占用的CPU不要老是百分之百;

最后一个,也是问题最多的,就是如何在子线程来控制UI中的控件,换句话说,就是在线程中控制窗体某些控件的显示。

 

对于问题一,我不建议使用Thread类提供的SuspendResume以及Abort这三个方法,前两个有问题,好像在VS05已经屏蔽这两个方法;对于Abort来说,除了资源没有得到及时释放外,有时候会出现异常。如何做呢,通过设置开关变量来完成。

 

对于问题二,我不建议使用静态成员来完成,仅仅为了线程而破坏类的封装有些得不偿失。那如何做呢,通过创建单独的线程类来完成。

 

对于问题三来说,造成这个原因是由于线程中进行不间断的循环操作,从而使CPU完全被子线程占有。那么处理此类问题,其实很简单,在适当的位置调用Thread.Sleep(20)来释放所占有CPU资源,不要小看这20毫秒的睡眠,它的作用可是巨大的,可以使其他线程得到CPU资源,从而使你的CPU使用效率降下来。

 

看完前面的三个问题的解释,对于如何做似乎没有给出一个明确的答案,为了更好地说明如何解决这三个问题,我用一个比较完整的例子展现给大家,代码如下。

//--------------------------- Sub-thread class ---------------------------------------

//------------------------------------------------------------------------------------

//---File:          clsSubThread

//---Description:   The sub-thread template class file

//---Author:        Knight

//---Date:          Aug.21, 2006

//------------------------------------------------------------------------------------

//---------------------------{Sub-thread class}---------------------------------------

namespace ThreadTemplate

{

    using System;

    using System.Threading;

    using System.IO;

    /// <summary>

    /// Summary description for clsSubThread.

    /// </summary>

    public class clsSubThread:IDisposable

    {

        private Thread thdSubThread = null;

        private Mutex mUnique = new Mutex();

 

        private bool blnIsStopped;

        private bool blnSuspended;

        private bool blnStarted;

        private int nStartNum;

 

        public bool IsStopped

        {

            get{ return blnIsStopped; }

        }

        public bool IsSuspended

        {

            get{ return blnSuspended; }

  • 1
    点赞
  • 190
    收藏
    觉得还不错? 一键收藏
  • 61
    评论
出现"java.lang.OutOfMemoryError: unable to create new native thread"错误通常是由于应用程序请求第三方系统资源时内存不足所导致的。这个错误可能发生在应用程序尝试创建新的本机线程,但无法分配足够的内存来支持新线程的情况下。这通常是由于操作系统的限制或者应用程序本身的资源管理问题所引起的。 在处理这个问题时,有几个可能的解决方案可以尝试: 1. 调整操作系统的线程限制:如果操作系统对线程数有限制,并且应用程序达到了这个限制,可以尝试增加操作系统的线程限制。这可以通过修改操作系统的配置文件来实现。 2. 优化应用程序的资源管理:检查应用程序的代码和配置,确保合理地使用和释放资源。特别注意确保关闭和释放不再使用的线程和连接,以避免资源泄漏。 3. 调整应用程序的线程池配置:如果应用程序使用了线程池来管理线程,可以尝试调整线程池的配置,如增加线程池的最大线程数或者使用不同的线程池实现。例如,如果应用程序使用的是newCachedThreadPool,可能会导致线程数无限制增长,从而导致内存不足。可以考虑使用固定大小的线程池来限制线程数。 4. 分析应用程序的线程使用情况:使用工具分析应用程序的线程使用情况,找出是否有线程泄漏或者线程过多的情况。可以使用工具如jstack、jvisualvm等来生成线程转储并进行分析。 综上所述,当出现"java.lang.OutOfMemoryError: unable to create new native thread"错误时,可以尝试调整操作系统的线程限制、优化应用程序的资源管理、调整应用程序的线程池配置或者分析应用程序的线程使用情况来解决该问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [问题分析:java.lang.OutOfMemoryError unable to create new native thre](https://download.csdn.net/download/weixin_35823099/86281250)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [【内存溢出系列】OutOfMemoryError:Java heap space(1/8)](https://blog.csdn.net/weixin_31966453/article/details/114324660)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [由于不知道Java线程池的bug,某程序员叕被祭天](https://blog.csdn.net/qq_33589510/article/details/109549716)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 61
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值