Java学习笔记之线程的创建和启动

来源:互联网 发布:淘宝消费者热线有用吗 编辑:程序博客网 时间:2024/05/03 17:59

每个运行中的程序就是一个进程,一个程序运行时,内部包含了多个顺序执行流,每个顺序执行流就是一个线程。

并发性(concurrency):并发指在同一时刻只能有一条指令执行,但多个进程指令被快速轮换执行。

并行性(parallel):并行指在同一时刻,有多条指令在多个处理器上同时执行。

线程的运行是抢占式的。一个线程可以创建和撤销另一线程,同一个进程中的多个线程可以并发执行。

线程的调度和管理由进程本身负责完成。线程可以拥有自己的堆栈、自己的程序计数器、和自己的局部变量,但不拥有系统资源。它与父进程中的其他线程共享该进程所拥有的全部资源。进程中的线程共享内存、文件句柄、和其它每个进程应有的状态。

创建线程的两种方式:继承Thread类和实现Runnable接口

通过继承Thread类创建和启动线程的步骤:

1.定义Thread类的子类,并重写run()方法,该run()方法的方法体就代表了线程需要完成的任务

2.创建Thread子类的实例,即创建了线程对象。

3.调用线程对象的start()方法来启动该线程。

实现Runnable接口创建和启动线程的步骤:

1.定义Runnable接口的实现类,并重写run()方法。

2.创建Runnable实现类的实例,并以此实例作为Thread的target来创建Thread对象,该Thread对象才是真正的线程对象。

3.调用线程对象的start()方法来启动该线程。

使用继承Thread类创建的多个线程之间没有共享数据,使用实现Runnable接口的方式创建的多个线程可以共享线程类的实例属性,这是因为程序所创建的Runnable对象只是线程的target,而多个线程可以共享一个target,所以多个线程可以共享同一个线程类(实际上应该是线程的target类)的实例属性。

从Java5开始,Java提供了Callable和Future接口用来创建有返回值的线程,步骤如下:

1.创建Callable接口的实现类,并实现call()方法,该call()方法的将作为线程执行体,且该call()方法有返回值。

2.创建Callable实现类的实例,使用FutureTask类来包装Callable对象,该FutureTask对象封装了该Callable对象的call()方法的返回值。

3.使用FutureTask对象作为Thread对象的target创建并启动新线程。

4.调用FurtureTask对象的get()方法来获得子线程执行结束后的返回值。

通过实现Runnable、Callable接口的方式来创建线程的优点:

1.线程类还可以继承其他类

2.多个线程可以共享同一个target对象,非常适合多个相同线程来处理同一份资源的情况,从而将CPU、代码和数据分开,形成清晰的模型,较好地体现了面向对象的思想。



原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 判刑罚金交不起怎么办 罚金太多交不起怎么办 判决书上的罚金怎么办 刑事罚款不交怎么办 缎面的鞋脏了怎么办 夏天脸上长粉刺怎么办 鬃狮不吃东西怎么办 买二手车的车牌怎么办 榴莲打开了肉没熟怎么办 gmat的prep做完怎么办 电脑没ip地址怎么办 电脑ip地址缺失怎么办 cos还原不了人物怎么办 执行局抓人十五天不放人怎么办 笔记本电脑键盘按键错乱怎么办 靠墙倒立上不去怎么办 医院多收钱了怎么办 学生总是转笔怎么办 吃错东西呕吐怎么办 手腕筋扭伤了怎么办 右膝盖内侧疼痛怎么办 膝盖关节腔积液怎么办 小孩玩游戏花钱怎么办 初三玩手机上瘾怎么办 无线网有感叹号怎么办 台式电脑网络感叹号怎么办 忘记发红包密码怎么办 电信诈骗被骗后怎么办 C小孩讨厌上学怎么办 军训来大姨妈怎么办 夏天军训来月经怎么办 军训遇到大姨妈怎么办 长春市图书馆读者证怎么办 济宁图书馆怎么办读者卡 海南省图书馆读者证怎么办 小孩子特别能吃怎么办 小孩吃不下去药怎么办 小孩不肯去上学怎么办 初中没有团员证怎么办 入团申请书丢了怎么办 刚成立单位社保怎么办