首页 > 代码库 > Java多线程学习笔记1
Java多线程学习笔记1
1、线程的基本概念
一个关于计算机的简化的视图是: 它有一个执行计算的处理机、 包含处理机所执行的程
序的 ROM(只读存储器)、 包含程序所要操作的数据的 RAM(只读存储器)。线程,被认为是带有自己的程
序代码和数据的拟处理机的封装。线程的三个部分处理机,代码,数据。
代码可以或不可以由多个线程共享, 这和数据是独立的。 两个线程如果执行同一个类的
实例代码,则它们可以共享相同的代码。
类似地,数据可以或不可以由多个线程共享, 这和代码是独立的。 两个线程如果共享对
一个公共对象的存取,则它们可以共享相同的数据。
线程化是允许多个活动共存于一个进程中的工具。 线程也称作轻量级进程。就象进程一样, 线程在程序中是独立的、 并发的执行路径, 每个线程有它自己的堆栈、 自己的程序计数器和自己的局部变量。一个进程中的多个线程共享相同的内存地址空间, 这就意味着它们可以访问相同的变量和对象, 而且它们从同一堆中分配对象。
每个 Java 程序都至少有一个线程 — 主线程。 当一个 Java 程序启动时, JVM 会创建主线程,并在该线程中调用程序的main() 方法。JVM 还创建了其它线程, 您通常都看不到它们 — 例如, 与垃圾收集、 对象终止和其它JVM 内务处理任务相关的线程。
2、线程的一些原因
使UI 响应更快,利用多处理器系统。
线程和进程的区别是:
每个进程都有独立的代码和数据空间(进程上下文),进程切换的开销大。
线程作为轻量的进程, 同一类线程可以共享代码和数据空间, 但每个线程有独
立的运行栈和程序计数器,因此线程切换的开销较小。
多进程——在操作系统中能同时运行多个任务(程序) ,也称多任务。
多线程——在同一应用程序中有多个顺序流同时执行。
3、Java 编程中的线程
一个 Thread 类构造函数带有一个参数, 它是 Runnable 的一个实例。 一个 Runnable 是由一个实现了 Runnable 接口(即,提供了一个 public void run()方法)的类产生的。
一个多线程编程环境允许创建基于同一个 Runnable 实例的多个线程。这可以通过以下
方法来做到:
Thread t1=new Thread(r);
Thread t2=new Thread(r);
此时,这两个线程共享数据和代码。
3.1启动线程
一个新创建的线程并不自动开始运行。你必须调用它的 start()方法。调用 start()方法使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由 JVM调度并执行。这并不意味着线程就会立即运行。
3.2线程状态
(1)新建状态——就绪状态:
当程序员显式调用线程的 start()方法时,该线程进入就绪(Runnable) 状态,也称可运行状态。
(2)就绪状态——运行状态:
Java 运行时系统提供的线程调度器按照一定的规则进行调度,一但某个线程获得执行机会,则立即进入运行(Running)状态、开始执行线程体代码。
(3)运行状态——阻塞状态:
当一个运行状态的线程发生阻塞时,调度器立即调度就绪队列中的另一个线程开始运行。
(4)阻塞状态——就绪状态:
当处于阻塞状态的线程所等待的条件已经具备, 例如用户输入操作已经完成时, 该线程将解除阻塞, 进入就绪状态。 注意, 不是恢复执行, 而是重新到就绪队列中去排队。
(5)运行状态——终止状态
线程的 run()方法正常执行完毕后,其运行也就自然结束,线程进入终止(Dead)状态。也可以在运行过程中,非正常地终止一个线程的执行,例如调用其 stop()方法。处于终止状态的线程不能在重新运行,因此不允许在一个 Thread 对象上两次调用start()方法。
Java多线程学习笔记1