zoukankan      html  css  js  c++  java
  • 多线程的开启与管理

    先写一个用于线程的类
    复制代码
    work代码
     1 public class work
     2     {
     3         //定义一个线程
     4         Thread thread = null;
     5         //关键字
     6         string Key = string.Empty;
     7         //控制while语句的
     8         bool s = false;
     9         string value = string.Empty;
    10         int i = 0;
    11         //构造方法
    12         public work(string name)
    13         {
    14             this.Key = name;
    15         }
    16         //开启线程,实例化线程
    17         public void start()
    18         {
    19             thread = new Thread(read);
    20             thread.Name = Key;
    21             thread.Start();
    22         }
    23         //线程开启要执行的方法
    24         public void read()
    25         {
    26             while (!s)
    27             {                
    28                 value = thread.Name + "线程第" + i + "次执行";
    29                 Thread.Sleep(2000);
    30                 i++;
    31                 // 在这里把你想要处理的方法放进来
    32             }
    33         }
    34         //停止线程
    35         public void stop()  //线程停止
    36         {
    37             s = true;
    38             this.thread.Abort();
    39         }
    40         //获取线程状态
    41         public string GetThreadState()
    42         {
    43             return thread.ThreadState.ToString();
    44         }
    45         //获取线程第几次执行
    46         public string GetValue()
    47         {
    48             return value;
    49         }
    50     }
    51 
    复制代码

     再写用户开启多线程跟关闭,管理的具体方法

    复制代码
    操作代码
     1 protected void open_Click(object sender, EventArgs e)
     2         {
     3             //定义一个哈希表
     4             Hashtable ht = new Hashtable();
     5             //session是要存哈希用的
     6             if (Session["thread"!= null)
     7             {
     8                 try
     9                 {
    10                     //实例化并开启线程
    11                     work w = null;
    12                     if (tb.Text.Trim() != "")
    13                         w = new work(tb.Text.Trim());
    14                     w.start();
    15 
    16                     //将已经存入session中的哈希信息传给ht
    17                     ht = (Hashtable)Session["thread"];
    18                     //将线程存入哈希表中
    19                     ht.Add(tb.Text.Trim(), w);
    20                     //打印线程信息
    21                     PrintThread();
    22                     HttpContext.Current.Response.Write("<script>alert('线程创建成功');</script>");
    23                 }
    24                 catch(Exception ex)
    25                 {
    26                     HttpContext.Current.Response.Write("<script>alert('来自创建有session:" + ex.Message + "');</script>");
    27                 }
    28             }
    29             else
    30             {
    31                 try
    32                 {
    33                     work w = null;
    34                     if (tb.Text.Trim() != "")
    35                         w = new work(tb.Text.Trim());
    36                     w.start();
    37                     
    38                     ht.Add(tb.Text.Trim(), w);
    39                     Session["thread"= ht;
    40                     PrintThread();
    41                 }
    42                 catch (Exception ex)
    43                 {
    44                     HttpContext.Current.Response.Write("<script>alert('来自创建无session" + ex.Message + "');</script>");
    45                 }
    46             }
    47         }
    复制代码

    关闭线程

    复制代码
    关闭代码
     1 //关闭线程
     2         protected void close_Click(object sender, EventArgs e)
     3         {
     4             if (Session["thread"== null)
     5                 HttpContext.Current.Response.Write("<script>alert('对不起,线程为空');</script>");
     6             else
     7             {
     8                 try
     9                 {
    10                     //将线程哈希取出
    11                     Hashtable ht = (Hashtable)Session["thread"];
    12                     //停止线程
    13                     work w = (work)ht[tb.Text.Trim()];
    14                     w.stop();
    15                     w = null;
    16                     ht.Remove(tb.Text.Trim());
    17                     //打印信息
    18                     PrintThread();
    19                     HttpContext.Current.Response.Write("<script>alert('线程" + tb.Text.Trim() + "已关闭');</script>");
    20                 }
    21                 catch (Exception ex)
    22                 {
    23                     HttpContext.Current.Response.Write("<script>alert('" + ex.Message + "');</script>");
    24                 }
    25             }
    26         }
    复制代码

    此方法是将多线程存入到hashtable中进行管理,而不是用线程池.

    .

  • 相关阅读:
    处理在finally中出现的异常(Java)
    【转】alt和title属性的区别及应用
    IE6下兼容CSS属性minheight的解决办法
    javascript中判断字符串是否以指定字符串开始或结尾
    IE6兼容改造中的反思
    字符操作函数
    魔术公式
    抽象类和纯虚函数
    悬空指针
    重载
  • 原文地址:https://www.cnblogs.com/cha1r/p/3472285.html
Copyright © 2011-2022 走看看