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、代码和数据分开,形成清晰的模型,较好地体现了面向对象的思想。
- Java学习笔记之线程的创建和启动
- java学习初探十八之线程的创建和启动
- Java之线程的创建和启动
- Java线程的学习_线程的创建和启动
- java线程详细学习一-----线程的创建和启动
- 线程——Java之线程的创建和启动
- 多线程02:《疯狂Java讲义》学习笔记——线程的创建和启动
- Java学习笔记之线程(一):线程的创建和生命周期
- Java 之 线程的创建和启动(一)
- Java 之 线程的创建和启动(二)
- Java 之 线程的创建和启动(三)
- Java多线程之线程创建和启动
- java多线程之创建和启动线程
- Java线程的创建和启动
- 【Java】线程的创建和启动
- 【Java基础】:线程的创建和启动
- Java线程的创建和启动
- Java线程的三种三种创建和启动
- Spring 标签属性 depends-on
- 杭电2030
- SpannableString
- 问题一百零八:元素的删除
- HDOJ 2045 不容易系列之(3)—— LELE的RPG难题
- Java学习笔记之线程的创建和启动
- UVa 11572 - Unique Snowflakes (好题)
- 运用string的大整数类
- 杂七杂八的小知识点
- 算法:图的深度优先遍历(Depth First Search)
- Android 图文结合,使用SpannableString和ImageSpan类
- SDL学习笔记五(音乐播放)
- Poj 2253 Frogger
- 开始写博客,为了写思考