一个进程中可以包含一个或多个线程,一个线程就是一个程序内部的一条执行线索。
在单线程中,程序代码按调用顺序依次往下执行,在这种情况下,当主函数调用了子函数,主函数必须等待子函数返回后才能继续往下执行,不能实现两段程序代码同时交替运行的效果。如果要一程序中实现多段代码同时交替运行,就需产生多个线程,并指定每个线程上所要运行的程序代码段,这就是多线程。
当程序启动运行是就自动产生了一个线程,主函数main就是在这个线程上运行的。当不再产生新的线程时,程序就是单线程的。
创建多线程有两种方法:继承Thread类和实现Runnable接口。
一个java.lang.Thread类的对象代表一个线程。
通过Thread类和它定义的对象,就可以获得当前线程对象,获取某一线程的名称。
实现多线程,可通过编写一个继承了Thread类的子类,子类要覆盖Thread类中的run函数,在子类run函数中调用想在新线程上运行的程序代码。
启动一个新的线程,不是直接调用Thread子类对象的run方法,而是调用Thread子类对象的start方法。
Thread类对象的start方法将产生一个新的线程,并在该线程上运行该Thread类对象中的run方法,根据面向对象的多态性,在该线程上实际运行的是Thread子类对象的run方法。
由于线程代码段在run方法中,那么该方法执行完后,线程也就相应的结束了。因而可以通过控制run方法中的循环条件来控制线程的终止。
- public class ThreadDemo {
-
-
public static void main(String args[]){
-
-
new TestThread().start();
-
TestThread2 thread2 = new TestThread2();
-
TestThread thread3 = new TestThread();
-
-
thread2.start();
-
thread3.start();
-
/*while(true){
-
System.out.println("main thread is runing...");
-
}
-
*/
-
}
-
}
-
-
class TestThread extends Thread {
-
-
public void run(){
-
while(true){
-
System.out.println(Thread.currentThread().getName() + " is runing!!!");
-
try {
-
Thread.sleep(1000);
-
} catch (InterruptedException e) {
-
// TODO Auto-generated catch block
-
e.printStackTrace();
-
}
-
}
-
}
-
}
-
-
-
class TestThread2 extends Thread {
-
-
public void run(){
-
while(true){
-
System.out.println(Thread.currentThread().getName() + " is runing***");
-
try {
-
Thread.sleep(1000);
-
} catch (InterruptedException e) {
-
// TODO Auto-generated catch block
-
e.printStackTrace();
-
}
-
}
-
}
-
}
copy from book
阅读(1157) | 评论(0) | 转发(1) |