---------------------- android培训、java培训、期待与您交流! ----------------------
1.什么是都线程?
多线程是指在单个的程序内可以同时运行多个不同的线程完成多个任务。
例如:
for(int i =0;i<100;i++){
System.out.println("Runnable A = " +i);
}
for(int i =0;i<100;i++){
System.out.println("Runnable B = " +i);
}
上面的代码中,在值支持单线程的语言中,前一个循环不执行完不可能执行第二个循环。要使两个循环同时执行,需要编写多线程的程序。
很多应用程序是用多线程实现的,如Hot java Web浏览器就是多线程应用的例子,在Hot java浏览器中,你可以一边滚动屏幕,一边下载Applet或图像,可以同时播放动画和声音等。
2.如何使用多线程?
1.Thread类和Runnable接口
多线程是一个程序中可以有多段代码同时运行,那么这些代码写在哪里,如何创建线程对象呢?
java语言实现多线程编程的类和接口,在java.lang包中定义了Runnable接口和Thread类。
Runnable接口中之定义了一个方法,他的格式为:
public abstract void run()
这个方法要由实现了Runnable接口的类实现,Runnable对象称为可运行对象,一个线程的运行就是执行该对象的run()方法
2.Thread类实现了Runnable接口,因此Thread对象也是可以运行对象,同时Thread类也是线程类。
Thread类的常用方法有:
pbulic static Thread currentThread(); //返回当前正在执行的线程对象的引用
public void setName(String name); //设置线程名
public String getName; //返回线程名
public static void sleep(long millis) throws InterruptedException
public static void sleep(long millis,int nanos)throws interruptedException
使当前正在执行的线程暂时停止执行指定的毫秒时间,指定时间过后,线程继续执行。
该方法抛出InterruptedException异常,必须捕获。
public void run(); //线程的线程体
poublic void start(); //由jvm调用线程的run()方法,启动线程开始执行。
public void setDaemon(boolead on) ; //设置线程为Daemon线程
public static void yieId(); //使当前执行的线程暂停执行,允许其他线程执行。
public ThreadGroup getThreadGeoup(); //返回该线程所属的线程组对象。
public void interrupt(); //中断当前线程。
public boolean isAlive(); //返货指定线程是否处于活动状态。
线程运行的代码就是实现了Runnable接口的类的run()方法或者是Thread类的子类的run方法,因此构造线程体就有两种方法:
*继承Thread类并覆盖他的run()方法:
*实现Runnable接口并实现它的run()方法。
1.通过继承Thread类,并覆盖run()方法,这时就可以用该类的实例作为线程的目标对象。
线面的程序定义了SimpleThread类,它继承了Thread类并覆盖了run()方法。
public class SimpleThread extends Thread{
public class SimpleThread(String str){
super(str);
}
public void run(){
for(int i=0;i<100;i++){
System.out.println(getName()+"="+i);
try{
sleep(int)(Math.random()*100));
}catch(InterruptedException e){}
}
System.out.println(getName()+"DONE");
}
}
SimpleThread类继承了Thread类,并覆盖了run方法,该方法就是线程体。
poublic class ThreadTest{
public static void main(String args[]){
Thread t1 = new SimpleThread("Runner A");
Thread t2 = new SimpleThread("Runner B");
t1.start();
t2.start();
}
}
线程在启动后执行本来的run()方法,实际上ThreadTest程序中三个线程同时运行,在引用程序的main()方法启动时,jvm就创建一个主线程,在住主线程中可以创建其他线程。
2.实现Runnable接口创建线程
可以定义一个类实现Runnable接口,然后将该类对象作为线程目标对象。实现Runnable接口就是实现run()方法。
下面程序通过实现Runnable接口构造线程体。
class T1 implements Runnable{
public void run(){
for(int i =0;i<15;i++){
System.out.println("Runber A="+i);
}
}
}
class t2 implements Runnable{
public void run(){
for(int i =0;i<15;i++){
System.out.println("Runber B="+i);
}
}
}
public class ThreadTest{
public static void main(String args[]){
Thread t1 = new Thread(new T1(),"Thread A");
Thread t2 = new Thread(new t2(),"Thread B");
t1.start();
t2.start();
}
}
3.线程的生命周期
线程从创建、运行结束处于:新建状态、就绪状态、运行状态、阻塞状态、死亡状态;
4.线程的优先级和调度
public final void setPriority(int new Priority); //设置线程的优先级
public final int getPriority(); //返回线程的优先级
newPriority为线程的优先级,其取值为1到10之间的证书,也可以使用Thread类定义的常量来设置线程的优先级;