线程三种创建方式
一、继承Thread类
//创建线程方式一:继承Thread类、重写run()方法、调用start()开启线程
public class TestThread extends Thread {
@Override
public void run() {
//run方法线程体
for (int i = 0; i < 20; i++) {
System.out.println("我在看代码---"+i);
}
}
public static void main(String[] args) {
//main线程、主线程
//创建一个线程对象
TestThread testThread = new TestThread();
//调用start()方法开启线程
testThread.start();
for (int i = 0; i < 2000; i++) {
System.out.println("我在学习多线程---"+i);
}
}
}
注意:线程开启不一定立即执行,由CPU调度执行。
二、实现Runnable接口
//创建线程方式二:实现runnable接口、重写run()方法、
// 执行线程需要丢入runnable接口实现类
public class TestThread implements Runnable {
@Override
public void run() {
//run方法线程体
for (int i = 0; i < 20; i++) {
System.out.println("我在看代码---"+i);
}
}
public static void main(String[] args) {
//创建runnable接口的实现类对象
TestThread testThread = new TestThread();
//创建线程对象,通过线程对象类开启我们的线程,代理
Thread thread = new Thread(testThread);
//调用start()方法开启线程
thread.start();
for (int i = 0; i < 2000; i++) {
System.out.println("我在学习多线程---"+i);
}
}
}
推荐使用:避免单继承局限性,灵活方便,方便同一个对象被多个线程使用。
//一份资源
TestThread testThread = new TestThread();
//多个代理
new Thread(testThread,"1").start();
new Thread(testThread,"2").start();
new Thread(testThread,"3").start();
三、实现Callable接口
- 实现Callable接口,需要返回值类型。
- 重写call方法,需要抛出异常。
- 创建目标对象。
- 创建执行服务:ExecutorService ser = Executor.newFixedThreadPool(1);
- 提交执行:Future result1 = ser.submit(t1);
- 获取结果:boolean r1 = result1.get();
- 关闭服务:ser.shutdownNow();
拓展
CPU调度是多道程序操作系统的基础。通过在进程间切换 CPU,操作系统可以使得计算机更加高效。