java实现多线程有两种方法:
一种是继承Thread类
如下面例子:
public class TestThread extends Thread {
//实现多线程方法一:继承Thread类,并重载run方法
public void run(){
//要将一段代码在一个新的线程上运行,该代码应写在run函数中
while(true){
System.out.println(Thread.currentThread().getName() + "is running...");
}
}
}
public class ThreadDemo2 {
public static void main(String[] args) {
//启动一个新的线程,不是直接调用Thread类子类对象的run方法,
//而是调用Thread类子类对象的start方法,Thread类对象的start方法
//将产生新的线程,并在该线程上运行该Thread类对象中的run方法,根据
//多态性 实际上运行的是Thread子类的run方法
TestThread testThread = new TestThread();
testThread.start();
while(true){
System.out.println("main thread is running...");
}
}
}
方法二是:实现接口Runnable中的run函数
如下列所示
//实现多线程方法二:实现Runnable接口,重载run函数,
//大多数情况下,如果只想重写 run() 方法,而不重写其他 Thread 方法,
//那么应使用 Runnable 接口。这很重要,
//因为除非程序员打算修改或增强类的基本行为,否则不应为该类创建子类。
public class TestThread implements Runnable {
public void run() {
// TODO Auto-generated method stub
System.out.println(Thread.currentThread().getName() + "is running......");
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
TestThread testThread = new TestThread();//创建TestThread类的一个实例
Thread thread = new Thread(testThread);//创建一个Thread类的实例
thread.start();//使线程进入runnable状态
while(true){
System.out.println("main thread is running...");
}
}
这两种方法的区别:实现Runnable接口适合多个相同的程序代码访问处理同一资源 |