多线程
方式1:继承Thread
1.自定义类继承Thread
2.覆盖run()方法
3.创建线程对象
4.启动线程
Thread类中的方法
String getName():返回该线程的名称。
void setName(String name):改变线程名称
void setPriority(int newPriority):更改线程的优先级。(1~10)
int getPriority():返回线程的优先级 (每个线程默认优先级5)
static Thread currentThread():返回当前正在执行的线程对象
static void sleep(long millis):睡眠
void join():等待该线程终止。
同步代码块:
synchronized (对象) {
原子操作
}
原子操作:一段代码在多线程环境下其中一个线程在执行时,必须一次性执行完毕,不能够有其他线程干预。
对象:如同锁的功能。
线程同步(安全):效率低(每个线程在执行的时候都会去判断有没有上锁)
线程异步(不安全):效率高
同步方法:将同步声明在方法上,表示整个方法只能有一个线程在执行。
同步方法
实例方法锁对象是:this
静态方法锁对象是:字节码文件对象
死锁
死锁问题:多个线程间互相等待的一种情况。
如何解决?
java提供了等待唤醒机制。
使用到的方法是Object类中:
void wait():让当前线程处于等待状态会放弃cpu的执行权和释放与该线程相关的所有锁标记,这个方法必须在同 步代码块中使用锁对象调用。
void notify()/notifyAll():必须在同步代码块中调用,表示唤醒当前锁对象的等待队列中一个线程/多个线程
线程间的通信
概念:不同种类线程操作同一个资源。
案例:生产者(添加数据)和消费者(消费数据)。