1、 多线程的第一种启动方式之继承Thread类
优点: 比较简单,可以直接使用Thread类中的方法,缺点: 可以拓展性比较差,不能再继承其他的类
线程类
执行类
2、多线程的第二种启动方式之实现Runnable接口
优点: 拓展性强,实现该接口的同时可以继承其他的类,缺点: 相对复杂,不能直接使用Thread类中的方法
线程类
执行类
3、多线程的第三种实现方式之实现Callable接口
优点: 拓展性强,实现该接口的同时可以继承其他的类,相对复杂,不能直接使用Thread类中的方法
线程类
执行类
4、多线的常用成员方法
- String getName() 返回此线程的名称
- void setName(String name) 设置线程名称(构造方法也可以设置名称)
- 细节
- 1.如果不设置线程名称,线程也是有默认序号的,从0开始格式为Thread-X
- 2.如果给线程设置名称可以使用setName和子类的构造方法
- 细节
- 当jvm虚拟机启动后会自动启动多条线程,其中就有一个线程名字为main他的作用就是调用main方法,执行里面的代码
- 细节
- static void sleep(long time) 让线程休眠指定的时间, 单位为毫秒
- 细节
- 哪条线程执行到了这个方法,那么哪条线程就会在这里停留相对于的时间方法的参数就表示睡眠的时间,单位为毫秒时间到了后线程会自动苏醒,并继续执行
- 细节
线程类
执行类
5、线程的优先级
- setPriority(int newPriority) 设置线程优先级
- final int getPriority() 获取线程优先级
线程类
执行类
6、守护线程
final void setDaemon(boolean on) 设置为守护线程(备胎线程),当其他的非守护线程执行结束后,守护线程会陆续结束,当非守护线程结束后,守护线程就没有存在的必要了。
线程类,
执行类
7、线程的让出
public static void yield() 出让线程/礼让线程,让出当前执行线程CPU的执行权
线程类
执行类
8、线程插队
public final void join() 插入线程/插队线程,讲指定的线程插入到main(当前线程)之前执行
线程类
执行类
9、同步代码块
在需要同步的代码块中加入synchronized(当前类字节码文件)
线程类
执行类
10、同步方法
将需要同步的代码抽取为一个方法,并使用synchronized进行修饰
线程类
执行类
11、线程锁
lock() 配合使用可以达到synchronized相同操作
线程类
执行类
12、死锁问题
死锁原因常见于锁的嵌套等操作,导致相互获取不到资源产生的等待问题
线程类
执行类
13、等待唤醒机制(消费者模式)
生产者(Cook) => 中间者(Desk) <= 消费者(Foodie)
线程类,
执行类
14、阻塞队列下的等待唤醒机制
生产者和消费者必须使用同一个队列ArrayBlockingQueue
生产者 => ArrayBlockingQueue <= 消费者
线程类,
执行类
1、线程池的创建
ExecutorService newCachedThreadPool() 创建一个没有上限的线程池
ExecutorService new FixedThreadPool(int nThread) 创建有上限的线程池
线程类
执行类
2、自定义线程池
例子,
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/6004.html