继承Thread类
写一个类继承自Thread类(extends Thread),重写run()方法。
用start()方法启动线程
实现Runnable接口
写一个类实现Runnable接口(implements Runnable),覆盖run()方法。
用new Thread(Runnable target).start()方法来启动
两种方式的比较
- 使用Runnable接口可以避免由于Java的单继承性带来的局限
- 适合多个相同的程序代码的线程去处理统一资源情况,把线程同程序的代码、数据有效的分离
- 推荐使用Runnable
代码块
继承Thread类,例如:
public class ThreadDemo1 extends Thread {
//继承thread类,重写run方法,线程的执行体放在run方法里
@Override
public void run() {
// TODO Auto-generated method stub
for(int i = 0 ; i < 20 ; i++ ){
System.out.println("---thread---"+i);
}
}
}
实现Runnable接口,例如:
public class RunnableDemo1 implements Runnable {
//实现Runnable接口,实现run方法,线程执行体放在run方法内
@Override
public void run() {
// TODO Auto-generated method stub
for(int i = 0; i < 20 ; i++){
System.out.println("---runnable---"+i);
}
}
}
启动线程,例如:
public class TestThreadDemo1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建一个线程
Thread thread1 = new ThreadDemo1();
//开启线程
thread1.start();
thread1.setPriority(10);
//Runnable runnable = new RunnableDemo1();
//创建线程,通过Runnable接口的实现类
Thread thread2 = new Thread(new RunnableDemo1());
thread2.start();
thread2.setPriority(1);
System.out.println("thread1: "+thread1.getPriority());
System.out.println("thread2: "+thread2.getPriority());
for(int i = 0; i < 30 ; i++){
System.out.println("---main---"+i);
}
}
}