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及其子类的实例 每个线程完成一定的任务,其实就是一段顺序执行 ...
随机推荐
- svn被锁 The project was not built due to "org.apache.subversion.javahl.ClientException: Attempted to lock an already-locked dir
解决办法 : 右键该项目 ,---->Team---->选"Team"-->"Refresh/Cleanup",并确认"Ref ...
- LitJson(读Exce文件写入到json文件):
读Exce文件写入到json文件汇总: //命名空间 using System.Collections; using System.Collections.Generic; using System. ...
- Ubuntu瞎胡搞
ubutnu的几个必不可少的软件: 1.Guake,超级方便的终端 2.Unity tweak tool 3.VLC,本地视频播放器 4.MyPint,简单画图软件 5.GIMP,PS工具 Subli ...
- JetBrains IDE激活
License server(服务器地址为http://idea.iteblog.com/key.php) Active Code:生成网址:http://idea.iteblog.com/
- 详解HBase架构原理
一.什么是HBase HBase是一个高可靠.高性能.面向列.可伸缩的分布式存储系统,利用HBase技术可在廉价的PC Server上搭建大规模结构化存储集群. H ...
- maven课程 项目管理利器-maven 3-9 maven依赖冲突 4星
依赖相同的jar包,版本不一致,优先选择哪个版本呢? 1 路径短的优先 如A依赖B,B依赖C,C依赖commons.jar 1.0 A依赖D,D依赖commons.jar 2.0 那么优先解析2.0, ...
- poi读取excel的辅助类
补充:对于这个工具已经转为一个工程项目,采用的是saxreader方式,支持大数据文件的读取.具体可以参照 github上的源码,使用可以简单参照wiki.项目wiki地址https://git.o ...
- HBuilder中改造console.info
HBuilder的js中console.info只会输出头一个参数,与谷歌浏览器行为不符合.让人很不习惯. 于是,对其改造一番. window.console.print=window.console ...
- 轻松解决 Eclipse Indigo 3.7 中文字体偏小,完美 Consolas 微软雅黑混合字体!(转)
在 Windows 7 下初始后化,发现界面变化不大,但中文字体却面目全非,小得根本看不见,而且也看起来很不爽.其实这是 Eclipse 的默认字体换了,以前的一直是 Courier New ,这次e ...
- nginx启动时报错
nginx启动时报错 原因:nginx: [emerg] mkdir() "/var/cache/nginx/client_temp" failed /var/cache/ngin ...