java中线程和多线程快速入门.doc
文本预览下载声明
进程是指在系统中正在运行的一个应用程序;线程是系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元。对于操作系统而言其调度单元是线程。一个进程至少包括一个线程,通常将该线程称为主线程。一个进程从主线程的执行开始进而创建一个或多个附加线程,就是所谓基于多线程的多任务
创建线程:
线程类继承Thread,重写run()方法,在run()方法中完成此线程所要完成的工作,直接创建线程类的对象,然后调用start()方法启动线程,默认调用run()方法
线程类实现Runnable接口,实现run()方法,在run()方法中完成此线程所要完成的工作;创建线程的时候要注意:
首先创建线程类的对象t,然后通过Thread tt = new Thread(t);来创建线程tt。也是通过调用start()方法来启动线程。
要想创建一个线程类,实质上是必须实现Runnable接口,因为Thread本身也是实现了Runnable接口的。但是如果要调用start()方法来启动一个线程,就必须构建Thread类的对象:如果是用第①中方式创建的线程类,那么他所创建的对象就可以隐式转换成Thread对象,所以可以直接调用start()方法;如果使用第②种方式创建的线程类,那么使用这个线程类创建对象之后,还必须通过这个对象创建一个Thread类的对象。
守护线程:
如何设置成守护线程:setDeamon()
守护线程一般用来为其他的线程提供服务,当其他的线程全部执行完毕以后,无论守护线程是否执行完成都会自动终止。
线程优先级:
优先级范围:1—10
设置线程t优先级的方法:t.setPriority(1--10)
获取线程t优先级的方法:t.getPriority()
线程优先级的默认值是:5
线程优先级为10的优先级最高,为1的最低
Join()方法:
以A,B两个线程为例:如果在线程A中调用B.join()方法,表示让线程A处于等待状态,直到线程B执行结束后才接着执行
Sleep()方法:
Sleep()方法时让当前线程处于等待状态,等待时间由参数决定
Sleep()方法的调用形式:Thread.thread(时间毫秒数);
线程的状态:
线程有五种状态:新生状态,可运行状态,运行状态,阻塞状态和运行结束状态。
当一个线程类在创建了对象之后,就意味这一个线程的产生,在调用start()方法之前为“新生状态”,调用start()方法让线程进入“可运行状态Runnable”,此时的线程可以被线程管理器调度;一旦线程调度(获取到时间片)即从可运行状态进入到“运行状态Running”;在运行过程中遇到阻塞事件(如:sleep(),wait(),锁等待……)便使线程变成了“阻塞状态Blocked”;直到阻塞事件消除(如:notify(),锁释放……)线程有由阻塞状态变回“可运行状态”;当线程执行结束则为“结束状态”。
Wait()方法:
使当前线程进入阻塞状态,直到有notify()方法或者notifyAll()方法唤醒
Notify()方法:
唤醒一个由于wait()方法处于等待的线程
NotifyAll()方法:
唤醒所有由于wait()方法处于等待的线程
创建线程
在Java中,线程也是一种对象,但并非任何对象都可以称为一个线程,只有实现了Runnable接口的类的对象才有资格成为线程,即实现Runnable接口是对象转变为线程的一个必要条件。
public interface Runnable {
public void run();
}
//runnable 字典定义为:可运行的
Runnable接口是一个非常简单的接口,它仅包含一个抽象的run()方法。但是,只有实现了Runnable接口的类的对象才能成为线程。
创建线程的方法如下:
Thread t = new Thread(runnable 对象);
runnable对象是指实现了Runnable接口的类的对象,线程执行时,runnable对象的run()方法会被调用执行。
如果想运行上面创建的线程t,还需要调用Thread的start()方法:t.start();
【示例】这一示例演示了创建并启动线程的方法。
class Runner1 implements Runnable { // 1.Runner1实现Runnable接口
public void run() {
for (int i = 1; i 20; i++) {
System.out.println(i);
}
}
}
public class Thread1 {
public static void main(String[
显示全部