Thread是.net1.0 1.1时出现的

主要了解线程等待、回调、前后台线程区别

1.实例

//定义:public delegate void ThreadStart();

ThreadStart threadStart = new ThreadStart(() =>

{

Thread.Sleep(5000);

this.DoSomethingLong("btnThreads_Click");

});

Thread thread = new Thread(threadStart);

//thread.IsBackground = true;//变成后台线程

thread.Start();//默认是前台线程,UI线程退出后,还会继续执行完;后台线程就直接退出了

 2.等待(如果线程执行完毕,dosomething())

while (thread.ThreadState != System.Threading.ThreadState.Running)

{

dosomething()

}

3.获取线程执行后的返回值

/// <summary>

/// 带返回值的

/// </summary>

/// <typeparam name="T"></typeparam>

/// <param name="funcT"></param>

/// <returns></returns>

private Func<T> ThreadWithReturn<T>(Func<T> funcT)

{

T t = default(T);

ThreadStart startNew = new ThreadStart(

() =>

{

t = funcT.Invoke();

});

Thread thread = new Thread(startNew);

thread.Start();

return new Func<T>(() =>

{

thread.Join();//线程执行完才返回t.(主线程会等待子线程完成)

return t;

});

}

调用方法获取返回值

Func<int> func = this.ThreadWithReturn(() =>//begininvoke

{

Thread.Sleep(2000);

Console.WriteLine($"这里是ThreadStart {Thread.CurrentThread.ManagedThreadId.ToString("00")}");

return 12345;

});

Console.WriteLine("已经执行到这里了。。。");

int iResult = func.Invoke();//endinvoke

4.回调

/// <summary>

/// 基于Thread封装支持回调

/// BeginInvoke的回调

/// </summary>

/// <param name="threadStart"></param>

/// <param name="callback"></param>

private void ThreadWithCallback(ThreadStart threadStart, Action callback)

{

ThreadStart startNew = new ThreadStart(

() =>

{

threadStart();

callback.Invoke();

});

Thread thread = new Thread(startNew);

thread.Start();

}

//委托的异步调用 测试:ThreadWithCallback

this.ThreadWithCallback(() =>

{

Thread.Sleep(2000);

Console.WriteLine($"这里是ThreadStart {Thread.CurrentThread.ManagedThreadId.ToString("00")}");

}

, () =>

{

Thread.Sleep(2000);

Console.WriteLine($"这里是callback {Thread.CurrentThread.ManagedThreadId.ToString("00")}");

});

参考资料:http://www.cnblogs.com/lvcy/archive/2012/06/16/2551539.html

学习笔记——线程 Thread的更多相关文章

  1. JavaSE中线程与并行API框架学习笔记——线程为什么会不安全?

    前言:休整一个多月之后,终于开始投简历了.这段时间休息了一阵子,又病了几天,真正用来复习准备的时间其实并不多.说实话,心里不是非常有底气. 这可能是学生时代遗留的思维惯性--总想着做好万全准备才去做事 ...

  2. Java学习笔记 线程池使用及详解

    有点笨,参考了好几篇大佬们写的文章才整理出来的笔记.... 字面意思上解释,线程池就是装有线程的池,我们可以把要执行的多线程交给线程池来处理,和连接池的概念一样,通过维护一定数量的线程池来达到多个线程 ...

  3. SYSBIOS学习笔记---线程(Threads)

    在SYS/BIOS中,广义上指被处理器执行的任何独立的指令流.线程是一个能够调用一个函数或者中断服务程序的单点控制.在sysbios系统中一共有硬件中断(HWI).软件中断(SWI).任务(Task) ...

  4. (CLR via C#学习笔记)线程基础

    一 使用线程的理由 1.可响应性(通常是对于客户端GUI应用程序);2.性能,多个CPU(或多核CPU)能并发执行多个线程,同时执行多个操作能提升性能. 二 线程开销 线程有空间(内存耗用)和时间(运 ...

  5. Java学习笔记——线程

    线程: 定义:线程是程序内的一个单一的顺序控制流程,也被称为“轻型进程(lightweight process)” 或“执行上下文(execution context )” 线程用于分隔任务 线程类似 ...

  6. Java多线程高并发学习笔记(一)——Thread&Runnable

    进程与线程 首先来看百度百科关于进程的介绍: 进程是一个具有独立功能的程序关于某个数据集合的一次运行活动.它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体.它不只是程序的代码,还包括当前的 ...

  7. struts2学习笔记--线程安全问题小结

    在说struts2的线程安全之前,先说一下,什么是线程安全?这是一个网友讲的, 如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码.如果每次运行结果和单线程运行的结果是一样 ...

  8. Java-J2SE学习笔记-线程-生产者消费者问题

    一.概述 模拟生产者消费者问题 二.代码 1.Consumer.java 2.Producer.java 3.SyncStack.java 4.Test.java 1.Consumer.java pa ...

  9. JAVA并发编程学习笔记------线程的三种创建方式

    创建线程一般有如下几个方式: 1. 通过继承Thread类来创建一个线程: /** * 步骤1:定义一个继承Thread类的子类 * 步骤2:构造子类的一个对象 * 步骤3:启动线程: * */ pu ...

随机推荐

  1. LeetCode CombinationSum

    class Solution { public: vector<vector<int> > combinationSum(vector<int> &cand ...

  2. 阿里云服务器被他人通过SSH暴力破解后的安全加固

    背景说明:我登录阿里云服务器控制台时,收到几条安全警告信息. 从图中可以知道,对方的IP地址是47.97.68.118,通过SSH登录方式,登录时用我服务器里的admin用户,然后用穷举法暴力破解ad ...

  3. LNMP下安装memcache

    转自:LNMP 添加 memcached服务 由于memcached具有更多的功能和服务,已经不推荐使用memcache了.(缺少个字母d) 1. 首先安装memcached服务端. 这里使用yum源 ...

  4. PHP的一个牛逼的数组排序函数array_multisort

    函数详情,具体可参考 官方手册 array_multisort 实际问题是这样的,有这么一组数据: $arr_times = array( array('2018-04-12 04:25:00', 3 ...

  5. 详解php常量const与define的区别和实例

    所谓常量是一个简单的标识符.在脚本执行期间该值不能改变.常量默认大小写敏感.通常常量标识符总是大写的.常量只能包含标量数据(boolean.integer.float和string).可以定义reso ...

  6. Android Studio查看签名文件sha1和MD5的方法

    Android在生成了应用签名文件后,如果我们想要查看签名文件的sha1和md5,该怎么操作呢??下面我们来看看. 把android studio界面左下角的Terminal终端窗口打开,进入JDK的 ...

  7. frame shiro 概述

    权限管理 权限管理包括用户身份认证和授权两部分,简称认证授权. 身份认证包括用户口令登陆.指纹验证.刷卡等方式. 授权即访问控制,控制谁能访问哪些资源,主体身份认证后分配权限以访问自己可以访问的资源. ...

  8. 八、Web移动端Fixed布局的解决方案

    移动端业务开发,iOS 下经常会有 fixed 元素和输入框(input 元素)同时存在的情况. 但是 fixed 元素在有软键盘唤起的情况下,会出现许多莫名其妙的问题. 这篇文章里就提供一个简单的有 ...

  9. 软工读书笔记 week 6 ——《疯狂的程序员》Part 1

    这本小说以主人公绝影上大学后初次接触编程开始讲起,这周主要看的就是绝影还在大学的那段经历,虽然故事背景很多年前,但很多地方仍然会引发我的共鸣. 第一个梦想 在“第一个梦想”一节讲了作业布置做一个通讯录 ...

  10. SVN合并时报错:Merge tracking not allowed with missing subtrees; try restoring these items

    使用的是TortoiseSVN; Merge tracking not allowed with missing subtrees; try restoring these items 下面会有跟着几 ...