Thread 创建线程
1.该线程变量 无参数
我们可以把线程的变量 理解为一个 委托。可以指向一个方法。有点像c语言中的指向函数的指针。
第1步我们创建了 Thread变量t1 ,第2步创建了一个方法threadChild()。第3步 这个委托 指向这个 threadChild()方法。 第4步 线程变量开始 执行 。
第1个线程例子的代码如下:

运行结果为:


从以上例子我们可以得知: 程序都是从主线程开始的。 因为该线程是前台线程,所以结束方式 是主线程结束还是 子线程都可以。主线程结束时,进程也不会停止,继续运行子线程。具体前台线程和后台线程的例子,详见于例子4,例子5。
2. 给线程 传递 变量 :
在上个例子中,我们的线程变量(委托)指向方法。但这个方法时无参的。当有需要给方法传参数的时候我们应该怎么做呢? 首先传入的参数不确定,为了保守起见。我们把函数的参数的类型 定义为object。 当我们传入 int类型的数据如30时,方法中的语句会自动把object类型的数据转为了 int类型的message。 然后在console输出语句中 ,输出这个message变量。

运行结果是:

3. 自定义类 实现带参数的线程
例子2虽然可以实现指向一个方法。但也有问题之处 ,比如说:如果我们需要传入的参数是 有int类型,也有 string类型,也有float类型。我们只写了一个int类型的方法,为了达到传入多个类型数据的要求,我们难道也要写入多个方法吗? 显然写多个 不同类型的方法,确实可以解决问题。 但这个方法的弊端在于:(1)从泛型的角度看: 1.你有几种类型,就要写多少次这个方法。 假设有3种类型,你就要写3个方法。这些方法的逻辑都差不多,只是类型稍微有些不同。重复写多次稍显得有些浪费。 2.从可扩展性的角度 ,假如说今天你有3种需要传入的类型,但是,可能明天要加1种类型,下个月又加1种类型,那么每添加一种类型,你就要修改一次。 维护代码也是要有成本的,这部分成本花的不大值的。 (2) 从安全性的角度看:涉及到object的装箱拆箱,对于数据来说有点不安全。 能避免应该尽量避免 。 (3) 从封装的角度看: 如果有一个方法 可以是 封装在一个 类里面,只有特定的对象才能够调用。相比于普通的static静态方法,封装在类里面的方法更好。
首先1.创建一个泛型类, 有一个泛型变量,泛型构造方法(该构造方法的参数也是泛型),也有一个普通方法。 2. 当创建变量的时候,传入参数。通过构造方法 赋值给泛型 变量。 3.创建 线程变量:并指向 对象.方法()。 委托想要指向方法必须要对象.。 3,子线程开始执行。
于是具体的代码实现如下:



4.前台线程 与 后台线程的对比:
线程分为前台线程和 后台线程。Thread创建的线程默认为前台线程。只要有一个线程在运行,那么程序的进程就仍在激活状态。所以在多个子线程运行的时候,即使Main()线程执行完毕了,进行仍然是活的。直到所有线程都运行完, 进程才会歇下来。 前台线程的设定地方是:在创建线程变量的时候,IsBackground=false,即不是后台线程。



在这个例子中,我们可以看到。子线程的开始和主线程的结束是不一定的,有时候是子线程先开始,有时候是主线程先结束。 但是最后一步一定是子线程的完成。 即使子线程没有sleep的操作,经过多次试验,子线程的完成也是最后一步。
5.后台线程的练习:
后台线程和前台线程的不同之处是。当有子线程和主线程在一起的时候,当主线程结束的时候,进程也会停止运行。那么子线程的剩余代码将不会再执行。经过多次试验,我也验证了 当主线程执行完毕后,"子线程运行完毕"这部分代码确实没有到,控制台也没有出现这几个文字了。 线程设置为后台线程 的地方在,线程的创建的时候,IsBackground设置为true。


后台线程一般用于处理不重要的事情,应用程序结束时,后台线程是否执行完成对整个应用程序没有影响。如果要执行的事情很重要,需要将线程设置为前台线程。
Thread 创建线程的更多相关文章
- C#基础:使用Thread创建线程
Thread类可以创建和控制线程,Thread类的构造函数重载为接受ThreadStart和ParameterizedThreadStart类型的委托参数.下面我们用一个例子来解释怎样用Thread类 ...
- 第十七节:Runnable创建线程,Thread创建线程,唤醒线程和计数器多线程,线程同步与等待
Runnable创建线程 public class RunnableDemo implements Runnable{ @Override public void run(){ int i = 1; ...
- 使用Thread创建线程
#_author:来童星#date:2019/12/17#使用Thread创建线程import threadingimport timeclass Sunthread(threading.Thread ...
- [非技术参考]C#基础:使用Thread创建线程(1)
Thread类可以创建和控制线程,Thread类的构造函数重载为接受ThreadStart和ParameterizedThreadStart类型的委托参数.下面我们用一个例子来解释怎样用Thread类 ...
- 7种创建线程方式,你知道几种?线程系列Thread(一)
前言 最近特别忙,博客就此荒芜,博主秉着哪里不熟悉就开始学习哪里的精神一直在分享着,有着扎实的基础才能写出茁壮的代码,有可能实现的逻辑有多种,但是心中必须有要有底哪个更适合,用着更好,否则则说明我们对 ...
- JAVA通过继承Thread来创建线程
创建一个线程的第二种方法是创建一个新的类,该类继承Thread类,然后创建一个该类的实例. 继承类必须重写run()方法,该方法是新线程的入口点.它也必须调用start()方法才能执行. 实例 // ...
- C/C++ Muti-Thread多线程编程学习(之)线程Thread | 创建、运行、结束
文章目录 前言 线程 Thread 创建线程 CreateThread _beginthread _beginthreadex pthread_create 线程运行 结束线程 前言 多线程(Mu ...
- 0036 Java学习笔记-多线程-创建线程的三种方式
创建线程 创建线程的三种方式: 继承java.lang.Thread 实现java.lang.Runnable接口 实现java.util.concurrent.Callable接口 所有的线程对象都 ...
- Java学习笔记-多线程-创建线程的方式
创建线程 创建线程的方式: 继承java.lang.Thread 实现java.lang.Runnable接口 所有的线程对象都是Thead及其子类的实例 每个线程完成一定的任务,其实就是一段顺序执行 ...
随机推荐
- goodBye wordPress
2016-07-28,我自己在GoDaddy上面注册了一个自己的域名,www.codetree.tech,同时在老薛主机上面购买了一个主机域名.我搭建了一个属于自己的博客,开心了很久.最近收到了域名续 ...
- 如何成为一名:黑客/Programmer/Python高手
如何成为一名黑客 Eric Steven Raymond https://translations.readthedocs.org/en/latest/hacker_howto.html How To ...
- inventor安装失败怎样卸载安装inventor 2016?
AUTODESK系列软件着实令人头疼,安装失败之后不能完全卸载!!!(比如maya,cad,3dsmax等).有时手动删除注册表重装之后还是会出现各种问题,每个版本的C++Runtime和.NET f ...
- 手机web前端调试页面的几种方式
前言 PC端web页面调试比较容易,这里主要说几种移动端调试的方法,从简单到复杂.从模拟调试到远程调试,大概分为几部分: 1.Chrome DevTools(谷歌浏览器)的模拟手机调试 2.weinr ...
- 《nginx 五》nginx实现动静分离
Nginx+Tomcat动静分离 动态页面与静态页面区别 静态资源: 当用户多次访问这个资源,资源的源代码永远不会改变的资源. 动态资源:当用户多次访问这个资源,资源的源代码可能会发送改变. 什么是动 ...
- 小程序 页面到详情的id传递
比如电影列表页跳转到电影详情页 在movie.js获取movieId; processDoubanData: function (moviesDouban, settedKey, categoryTi ...
- C#操作Excel报错:服务器出现意外情况。
C#操作Excel表格时,如遇以下错误: 服务器出现意外情况.(异常来自 HRESULT:0x80010105(RPC_E_SERVERFAULT)) 解决方案: 打开你电脑中的Office-Exce ...
- IIS_常见问题及解决方法
配置错误 在唯一密钥属性“value”设置为“default.aspx”时,无法添加类型为“add”的重复集合项 配置文件 \\*******\web\web.config web.config中 & ...
- image压缩
public byte[] compressPic(byte[] data) { if(data.length == 0){ return new byte[0]; } Image img = nul ...
- [转]开发中如何解决SQL注入的问题
Java防止SQL注入 SQL 注入简介: SQL注入是最常见的攻击方式之一,它不是利用操作系统或其它系统的漏洞来实现攻击的,而是程序员因为没有做好判断,被不法用户钻了SQL的空子,下面 ...