1、继承Thread
public class TestServer extends Thread {
public TestServer() {// 构造方法
System.out.println("TestServer 已启动");
Thread thread1 = new Thread(new Runnable() {
public void run() {
try {
………… //逻辑实现区
Thread.sleep(2000);// 线程休眠2秒
// 线程终止(exit()、stop()、interrupt())
} catch (IOException e) {
e.printStackTrace();
}
}
});
Thread thread2 = new Thread(new Runnable() {
public void run() {
try {
………… //逻辑实现区
Thread.sleep(2000);
} catch (IOException e) {
e.printStackTrace();
}
}
thread1.start();
thread2.start();
}
}
public static void main(String[] args){
new TestServer();
}
2、实现Runnable接口
public class MyRunnable implements Runnable {
@Override
public void run() {
for (int i=0; i<10; i++) {
System.out.println("线程开始:"+Thread.currentThread().getName());
}
}
}
//TestThreadRunnable.java
public class TestThreadRunnable {
public static void main(String [] args) {
Runnable r = new MyRunnable();
Thread t1 = new Thread(r, "线程a");
Thread t2 = new Thread(r, "线程b");
t1.start();
t2.start();
}
}
注意:run()方法并没有开启新线程;start()方法开启新线程。
实际开发中我们通常采用Runnable接口来实现多线程。因为实现Runnable接口比继承Thread类有如下好处:
1. 避免继承的局限,一个类可以继承多个接口,但是类只能继承一个类。
2. Runnable接口实现的线程便于资源共享。而通过Thread类实现,各自线程的资源是独立的,不方便共享