17. 多线程
1. 进程与线程:
进程和程序对应的。打开程序的时候就会开启至少一个进程。存的代码:: 资源内存
线程: cpu运行线程,线程访问进程上的资源。
2. 如何开启线程
第一种:
-
实现Runnable接口, 覆盖run方法。
-
实例化Thread类,通过构造放入runable.。
-
调用start()启动线程
第二种:
- 继承Thread类, 覆盖run方法。
开发用第一种: 单继承多实现
3. 线程方法
Thread.currentThread(): 获取当前线程对象
Thread.yield(); 从运行状态进入 等待运行状态
Thread.sleep(long ): 线程睡眠
t1.setPriority(int ): 优先级优先级,保证概率性的。高级先结束。
t1.setDaemon(boolean ): 设置守护线程, 创建者结束,线程就结束了
t2.join(); 把t2加入到当前线程中。t2先运行完之后再继续t1运行。
synchronized关键字: 同步锁
- 场景: 多个线程访问同一数据的时候可能产生线程安全问题。 (数据:锁的是对象的属性。)
- 同步锁会影响效率。
- StringBuffer线程安全,慢, StringBuilder 线程不安全,快
- 语法: 1. 修饰方法 2. 修饰代码块
public synchronized void add() {
count = count + 1;
System.out.println(Thread.currentThread().toString() + count);
}
public void substract() {
synchronized(this) {
count = count - 1;
System.out.println(Thread.currentThread().toString() + count);
}
}
- Object wait() : 线程进入等待池。
- Object notify(); 等待池随机一个线程回到 可运行状态
- Object notifyAll(); 等待池所有线程回到 可运行状态
六态图:
行状态
六态图:
[外链图片转存中…(img-Ci7X6orE-1618116205381)]