本文为狂神说Java多线程课程的笔记
【狂神说Java】多线程详解
文章目录
1、线程创建
1.1 Thread class
继承Thread类(重点)
- 将类声明为Thread的子类
- 重写Thread类的run方法,编写线程执行体
- 创建线程对象,调用start()方法启动线程
//声明Thread的子类
class PrimeThread extends Thread {
long minPrime;
PrimeThread(long minPrime) {
this.minPrime = minPrime;
}
public void run() {
// compute primes larger than minPrime
. . .
}
}
//创建线程对象,调用Start()方法启动线程
PrimeThread p = new PrimeThread(143);
p.start();
注意:线程开启不一定立即执行,由CPU调度执行。
1.2 Runnable
接口 实现接口(重点)
- 定义MyRunnable类实现Runnable接口
- 实现run()方法,编写线程执行体
- 创建Runnable对象丢到Thread对象构造器中,调用start()方法启动线程
//定义类实现接口
class PrimeRun implements Runnable {
long minPrime;
PrimeRun(long minPrime) {
this.minPrime = minPrime;
}
public void run() {
// compute primes larger than minPrime
. . .
}
}
//!!!创建的Runnable对象
PrimeRun p = new PrimeRun(143);
//!!!丢到Thread构造器中调用执行
new Thread(p).start();
推荐使用
runnable
接口而不是Thread
继承,因为Java只能单继承但是可以实现多个接口,灵活方便。方便同一个对象被多个线程使用。
1.3 Callable
接口 实现接口(了解)
- 实现
Callable
接口,需要返回值类型。 - 重写
call
方法,需要抛出异常。 - 创建目标对象。
- 创建执行服务:
ExecuteService ser = Executors.newFixedThreadPool(1);
- 提交执行:
Future<Boolean> result1 = ser.submit(t1);
- 获取结果:
boolean r1 = result1.get()
- 关闭服务
ser.shutdownNow();
Callable的好处
- 可以定义返回值。
- 可以抛出异常。
扩展:代理模式
- 真实对象和代理对