------- android培训、java培训、期待与您交流! ---------- (一)关于线程
先从进程说起,进程是程序的一次动态执行过程,经历了从代码加载,执行,到执行完的过程。由于cpu具有分时机制,(与通信中的时分多址非常相似)所以每个进程都能循环获得自己的CPU时间片。
而线程和进程一样,都是实现并发的基本单位。线程是比进程更小的执行单位。一个进程在执行中会有多个线程,这些线程可以同时存在,同时运行。
Java是少数几个支持多线程的语言之一。利用线程会提高程序的运行效率
(二)java中线程的实现
(1)Thread类
java.lang包中定义了Thread类,一个类继承了Thread类,此类就称为多线程操作类。语法如下:
class 类名称 extends Thread{
属性;
方法;
public void run(){
线程主体;
}
}
(2)Runnable接口
java中也可以通过实现Runnable接口的方式实现多线程,其接口中只定义了一种抽象方法:
public void run();
class 类名称 implements Runnable{
属性;
方法;
public void run(){
线程主体;
}
}
无论用哪种方式启动多线程,最后都必须靠Thread类才能启动多线程。在Thread类中,run()方法调用的是Runnable接口中的run方法,也就是说此方法是Runable子类完成的。如果要通过Thread类实现多线程,必须覆写run()方法。
关于两者的区别:Thread的子类不适合多个线程共享资源的情况,
而实现Runnable接口,其优点有:
(1)可以很方便的实现资源的共享,
(2)也可以避免由于java的单继承特性带来的局限。
(3)代码能够被多个线程共享,代码与数据是独立的。
以下是一个简单的小程序,用Runnable接口来实现多个卖票窗口出票。
class MyThread implements Runnable{ // 继承Thread类,作为线程的实现类
private int ticket = 5 ; // 表示一共有5张票
public void run(){ // 覆写run()方法,作为线程 的操作主体
for(int i=0;i<100;i++){
if(this.ticket>0){
System.out.println("卖票:ticket = " + ticket--) ;
}
}
}
};
public class RunnableDemo{
public static void main(String args[]){
MyThread mt = new MyThread() ; // 实例化对象
new Thread(mt).run() ; // 调用线程主体
new Thread(mt).run() ; // 调用线程主体
new Thread(mt).run() ; // 调用线程主体
}
};
(三)关于线程中的一些状态。