什么是线程
一个程序可能包含多个并发运行的任务,线程(Thread)是指一个任务从头到尾的执行流。线程提供了运行一个任务的机制。对于 Java语言,可以再一个程序中并发得启动多个线程。这些线程可以再多处理器系统上同时运行。
在单处理器系统中,多个线程共享cpu时间成为时间共享。儿操作系统负责调度以及分配资源给每一个线程。因为cpu大部时间都是空闲的,所以这种安排是切实可行的。多线程可以是程序反应更快,交互性更强、执行效率更高。例如,在使用word时,允许在输入文字的同时打印文件或者保存文件。在一些情况下即使在单处理器系统上,多想成程序的运行速度也比单线程的程序更快。
当程序作为一个应用程序运行时,java解释器为main方法启动一个线程。当程序作为一个applet运行时,web浏览器启动一个线程来运行applet。还可以在程序中创建附加的线程以执行并发任务。在java 中每一个任务都是 Ruanable几口的一个实例,也成为可运行对象。线程本质上就是便于任务执行的对象。
创建任务和线程
任务就是对象,为了创建任务首先需要为任务创建一个类,任务类必须实现Ruanable接口。Ruanable接口只有一个run方法。需要实现这个方法来高旭系统线程将如何运行。
一旦定义了一个TaskClass,就可以用它的构造方法创建一个任务。 例如 TaskClass task = newTaskClass(.....);
任务必须在线程中运行。Thread类包括创建线程的构造方法以及控制线程的很多有用的方法。使用下面的语句创建一个线程:
Thread thread = new Thread();
然后调用 thread.start() 方法告诉java虚拟机该线程准备运行;值得注意的是 条用Thread 的start 方法后并不是立即执行任务 的run方法,而是告诉虚拟机 该线程正在等待调用,置于什么时候调用,我们并不能肯定。
package LianXi; public class TaskThreadDemo{ public static void main(String[] args){ PrintChar printC = new PrintChar('C',1000); PrintChar printX = new PrintChar('X',1000); PrintNum printNum = new PrintNum(1000); Thread thread1 = new Thread(printC); Thread thread2 = new Thread(printX); Thread thread3 = new Thread(printNum); thread1.start(); thread2.start(); thread3.start(); } } class PrintChar implements Runnable{ private char _charToPrint; private int _times; public PrintChar(char c,int t){ _charToPrint = c; _times = t; } public void run(){ for(int i = 0 ;i <_times; i++){ System.out.print(_charToPrint); } } } class PrintNum implements Runnable{ private int _lastNum; public PrintNum(int lastNum){ _lastNum = lastNum; } public void run(){ for(int i = 0; i<=_lastNum; i++){ System.out.print(i); } } }