黑马程序员技术交流社区

标题: 黑马程序员-多线程 [打印本页]

作者: 安玉波    时间: 2013-3-7 18:10
标题: 黑马程序员-多线程
一、多线程前台线程和后台线程        前台线程:只有所有的前台线程都关闭才能完成程序的关闭。
        后台线程:只要所有的前台线程结束,后台线程自动结束。
        Thread threadFrist =new Thread (方法名);
        threadFrist .IsBackGround=true;//将线程threadFrist 设置为后台线程 (当所有的前台线程结束,后台线程自动退出)
二、多线程线程重入的问题
        以下代码是定义了两个线程,这两个线程执行同一个方法ChangTxt(),如果只有一个线程执行ChangTxt方法,那么txtNum文本里面的值是10000,那么两个线程都执行同一个方法ChangTxt,是不是文本框里面的值就是20000呢?答案小于20000 ,因为在执行这两个线程时,并不是说第一个线程执行完这个方法后,第二个线程再执行,CPU在执行这两个线程是执行一会线程1在执行线程2,比如线程1在执行完代码:int num = int.Parse(txtNum.Text.ToString().Trim());后就去执行代码2:这时候线程1处于暂停状态,这样有事我再用多线程是会发现数据的丢失,这就是多线程线程重入的问题引起的。
        public Thread()
        {
            InitializeComponent();
            TextBox.CheckForIllegalCrossThreadCalls = false;//关闭当前窗体  对非法跨线程访问 文本框控件 的检查
        }
        /// <summary>
        /// 修改文本框里面的内容
        /// </summary>
        void ChangTxt()
        {
            for (int i = 0; i < 10000; i++)
            {
                int num = int.Parse(txtNum.Text.ToString().Trim());
                num++;
                txtNum.Text = num.ToString();
            }
        }

        private void btnThreadProblem_Click(object sender, EventArgs e)
        {
            //创建线程
            Thread threadFrist = new Thread(ChangTxt);
            threadFrist.IsBackground = true;//把线程设置为后台线程
            threadFrist.Start();//开启线程

            Thread threadFrist2 = new Thread(ChangTxt);
            threadFrist2.IsBackground = true;
            threadFrist2.Start();
        }



作者: 许庭洲    时间: 2013-3-7 20:40
值得学习ing!
作者: 苦咖啡    时间: 2013-8-31 11:45
lz写的不错,往努力,加油!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2