进程和线程
进程:每个独立运行的程序成为一个进程(Process)
多进程:支持多个进程同时执行的操作系统就被称为多进程操作系统或多任务操作系统
线程:在一个程序内部也可以实现多个任务并发执行,其中每个人任务称为线程(Thread)
多线程优势
1)提高界面程序的响应速度。
2)充分利用系统资源。
多线程实现
在实现多线程编程时,首先需要让一个类具备多线程能力(继承Thread类或实现Runnable接口的类具备多线程的能力),然后创建线程对象,调用对应的启动线程方法,即可实现多线程编程。
Java语言提供3种实现方式
1)继承Thread类
2)实现Runnable接口
3)使用Timer和TimerTask组合
继承Thread类实现多线程
如果一个类继承了Thread类,则该类就具备了多线程的能力,可以以多线程的方式执行。
例:
/*以继承Thread类实现多线程*/
public class TestThread extends Thread{
public static void main(String args[]){
TestThread tt1=new TestThread();//创建对象
tt1.start();//启动线程
try{
for(int i=0;i<5;i++){
Thread.sleep(1000);//延迟1秒
System.out.print("Main:"+i);
}
}catch(Exception e){}
}
public void run(){
try{
for(int i=0;i<5;i++){
Thread.sleep(1000);//延迟1秒
System.out.print("Run:"+i);
}
}catch(Exception e){}
}
}
实现Runnable接口
Java语言中提供的另外一种实现多线程应用程序的方式是多线程对象实现java.lang.Runnable接口,并且在该类中重写Runnable接口的run方法。(这种定义方式的好处在于多线程应用对象可以继承其他对象而不是必须继承Thread类。按照Java语言的语法,一个类可以实现任意多个接口,因此这种实现方式在实际实现时的通用性要比继承Thread类实现多线程的方式好一些。)
例:
//Runnable测试类
public class TestRunnable1{
public static void main(String[] args){
Runnable1 r1=new Runnable1();//创建对象
Thread t1=new Thread(r1);
t1.start();//启动线程t1
try{
for(int i=0;i<5;i++){
Thread.sleep(1000);//延迟1秒
System.out.print("Main:"+i);
}
}catch(Exception e){}
}
}
/*使用实现Runnable接口的方式实现多线程*/
class Runnable1 implements Runnable{
public void run(){
try{
for(int i=0;i<10;i++){
Thread.sleep(1000);//延迟1秒
System.out.print("Run:"+i);
}
}catch(Exception e){}
}
}
使用Timer和TimerTask组合
Timer类实现的是类似闹钟的功能,也就是定时或者每隔一定时间间隔触发一次线程。其实,Timer类本身实现的就是一个线程,只是这个线程是用来实现调用其他线程的。而TimerTask类是一个抽象类,该类实现了Runnable接口,所以按照前面的介绍,该类具备多线程能力。
在这种实现方式中,通过继承TimerTask类创建子类,是该子类获得多线程的能力,将需要多线程执行的代码书写在run方法内部,然后通过Timer类启动线程的执行。在实现使用时,一个Timer可以启动任意多个TimerTask实现的线程,但是多个线程之间会存在阻塞。因此,如果多个线程之间需要完全独立运行,最好还是一个Timer启动一个TimerTask实现的线程。
例:
//Runnable测试类
public class TestRunnable1{
public static void main(String[] args){
Runnable1 r1=new Runnable1();//创建对象
Thread t1=new Thread(r1);
t1.start();//启动线程t1
try{
for(int i=0;i<5;i++){
Thread.sleep(1000);//延迟1秒
System.out.print("Main:"+i);
}
}catch(Exception e){}
}
}
/*使用实现Runnable接口的方式实现多线程*/
class Runnable1 implements Runnable{
public void run(){
try{
for(int i=0;i<10;i++){
Thread.sleep(1000);//延迟1秒
System.out.print("Run:"+i);
}
}catch(Exception e){}
}
}