学习笔记——线程 Thread
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的更多相关文章
- JavaSE中线程与并行API框架学习笔记——线程为什么会不安全?
前言:休整一个多月之后,终于开始投简历了.这段时间休息了一阵子,又病了几天,真正用来复习准备的时间其实并不多.说实话,心里不是非常有底气. 这可能是学生时代遗留的思维惯性--总想着做好万全准备才去做事 ...
- Java学习笔记 线程池使用及详解
有点笨,参考了好几篇大佬们写的文章才整理出来的笔记.... 字面意思上解释,线程池就是装有线程的池,我们可以把要执行的多线程交给线程池来处理,和连接池的概念一样,通过维护一定数量的线程池来达到多个线程 ...
- SYSBIOS学习笔记---线程(Threads)
在SYS/BIOS中,广义上指被处理器执行的任何独立的指令流.线程是一个能够调用一个函数或者中断服务程序的单点控制.在sysbios系统中一共有硬件中断(HWI).软件中断(SWI).任务(Task) ...
- (CLR via C#学习笔记)线程基础
一 使用线程的理由 1.可响应性(通常是对于客户端GUI应用程序);2.性能,多个CPU(或多核CPU)能并发执行多个线程,同时执行多个操作能提升性能. 二 线程开销 线程有空间(内存耗用)和时间(运 ...
- Java学习笔记——线程
线程: 定义:线程是程序内的一个单一的顺序控制流程,也被称为“轻型进程(lightweight process)” 或“执行上下文(execution context )” 线程用于分隔任务 线程类似 ...
- Java多线程高并发学习笔记(一)——Thread&Runnable
进程与线程 首先来看百度百科关于进程的介绍: 进程是一个具有独立功能的程序关于某个数据集合的一次运行活动.它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体.它不只是程序的代码,还包括当前的 ...
- struts2学习笔记--线程安全问题小结
在说struts2的线程安全之前,先说一下,什么是线程安全?这是一个网友讲的, 如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码.如果每次运行结果和单线程运行的结果是一样 ...
- Java-J2SE学习笔记-线程-生产者消费者问题
一.概述 模拟生产者消费者问题 二.代码 1.Consumer.java 2.Producer.java 3.SyncStack.java 4.Test.java 1.Consumer.java pa ...
- JAVA并发编程学习笔记------线程的三种创建方式
创建线程一般有如下几个方式: 1. 通过继承Thread类来创建一个线程: /** * 步骤1:定义一个继承Thread类的子类 * 步骤2:构造子类的一个对象 * 步骤3:启动线程: * */ pu ...
随机推荐
- PHP中的prepare准备语句的意义
mysqli和PDO扩展都有prepare这个语法,刚开始以为只是单纯的语法,没想到,还是有实际意义的: “每次发送查询语句给MySQL服务时,都必须解析该查询的语法,确保结构正确并能够执行.这是这个 ...
- Angular7 Drag and Drop
完整代码在最后,下面讲解以此代码为例 1.环境配置 1.1 安装@angular/material.@angular/cdk cnpm install --save @angular/material ...
- Pig安装
环境: hadoop-2.4.1.jdk1.6.0_45.pig-0.12.1 1.下载pig并解压 tar -xzvf pig-0.12.1.tar.gz 2.设置环境变量 export PIG ...
- 浅谈maven中的scope,systempath
scope maven中scope的默认值是compile scope的分类 1)compile 默认是compile.compile表示被依赖项目需要参与当前项目的编译,包括后续的测试,运行周期也 ...
- npm用法及离线安装方法
npm用法及离线安装方法 基本的用法 查看某个模块的全部信息,或者可以查看单个信息 npm info name npm info name version npm info name homepage ...
- SQLSERVER2012里的扩展事件初尝试(下)
SQLSERVER2012里的扩展事件初尝试(下) SQLSERVER2012里的扩展事件初尝试(上) 我们继续文章扩展事件在Denali CTP3里的新UI(二)里的这个实验 脚本文件下载:http ...
- javascript strict mode
ECMAScript 版本5是目前最广泛使用的js版本. 其中的一个重要feature strict mode很多人不是很清除和理解. 什么是strict mode? strict mdoe是一种强制 ...
- 【转】stropts.h: No such file or directory – How to Fix
原文地址:stropts.h: No such file or directory – How to Fix 作者:xjc2694 It is a known issue that modern Li ...
- Oracle 数据库执行慢SQL
) hou, - ))) mini, c.sql_address, c.inst_id,f.full_name,u.user_name, b.user_concurrent_program_name, ...
- Oracle 处理坏块
本文主要介绍如何去处理在Oracle数据库中出现坏块的问题,对于坏块产生在不同的对象上,处理的方法会有所不同,本文将大致对这些方法做一些介绍.因为数据库运行时间长了,由于硬件设备的老化,出现坏块的几率 ...