一、Thread:
1、自定义线程类继承Thread
2、重写run()方法
3、创建对象 调用start()方法开启线程
public class TestThread extends Thread {
@Override
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println("我在看代码----"+i);
}
}
public static void main(String[] args) {
TestThread testThread=new TestThread();
testThread.start();
for (int i = 0; i < 1000; i++) {
System.out.println("我在学习多线程----"+i);
}
}
}
执行结果
二、Runnable
1、定义MyRunnable类实现Runnable接口
2、实现(重写)run()方法,编写线程执行体
3、创建线程对象 调用start()方法 启动线程
public class TestThread1 implements Runnable {
@Override
public void run() {
for (int i = 0; i < 200; i++) {
System.out.println("CSDN------"+i);
}
}
public static void main(String[] args) {
//创建 Runnable 口的实现类对象
TestThread1 testThread1=new TestThread1();
//创建线程对象,通过线程对象开启线程
new Thread(testThread1).start();
for (int i = 0; i < 1000; i++) {
System.out.println("花泽生菜-----"+i);
}
}
}
执行结果
小结:
~继承Thread类
·子类继承Thread类具备多线程能力
·启动线程:子类对象.start();
`不建议使用:避免OOP单继承局限性
~实现Runnanle接口
·实现接口Runnable具备多线程能力
·启动线程:传入目标对象+Thread对象.start();
推荐使用:避免单继承局限性,灵活方便,同一个对象被多个线程使用