zoukankan      html  css  js  c++  java
  • [传智播客学习日记]多线程Thread类的基本应用

    有这样一个需求,一个小程序,上面有一个文本框和一个按钮,要求按下按钮时文本框里的内容从0循环变化到10000。
    乍一看这不就是一个循环修改字符串嘛!可是写出来一运行,就会发现点按钮的时候程序卡死!
    因为在同一个进程当中,代码是顺序执行的,我们同样可以让程序在初始化加载的时候就循环更新数字,结果就是循环还没执行完的时候窗口不显示,还是一种卡死的效果。
    一种有效的办法就是给这个循环单开辟一个线程。

    在按钮click事件里,开启一个新线程,Test是一个方法,这里传进的是个委托。

    1 Thread th = new Thread(Test);

    然后给这个线程定义为后台线程,让主窗体关闭时这个也关闭。

    1 th.IsBackground = true;

    告诉CPU可以开启这个线程。

    1 th.Start();

    Test方法就简单了,不用解释:

    1 void Test()
    2 {
    3 int number = int.Parse(textBox1.Text);
    4 while (number < 10000)
    5 {
    6 number++;
    7 textBox1.Text = number.ToString();
    8 }
    9 }


    最后在窗体构造函数里加上这么一句:

    1 CheckForIllegalCrossThreadCalls = false;

    由于计数线程使用了窗体上的东西,是跨线程操作,所以不检查跨线程调用的合法性。
    这样一来就避免了UI卡死的问题。

    线程类的常用成员:

    Start()            启动线程
    Abort()            终止线程
    Name            线程名
    CurrentThread        获得当前的线程引用
    Thread.Sleep(1000)    可以使当前线程停止一段时间运行

  • 相关阅读:
    Dbcp2抛出org.apache.commons.dbcp2.LifetimeExceededException
    DbUtils使用时抛出Cannot get a connection
    Spring注解【非单例】
    Exception in thread java.lang.IllegalThreadStateException
    eclipse选中变量,相同变量高亮。
    git push 403
    java虚拟机能并发的启动多少个线程
    产品的随想
    【转载】学习新东西的唯一方法
    Mysql错误问题记录
  • 原文地址:https://www.cnblogs.com/Elijah/p/2266656.html
Copyright © 2011-2022 走看看