线程相关的基本方法有wait,notify,notifyAll,sleep,join,yield等。 1.线程等待(wait) 调用该方法的线程进入waiting状态,会释放对象的锁,同时只有等待另外线程的通知或被中断才会返回 2.线程睡眠(sleep) sleep导致当前线程休眠不会释放当前占有的锁,会导致线程进入timed-wating状态 3.线程让步(yield) yield会使当前线程让出CPU执行时间片,与其他线程一起重新竞争CPU时间片。一般情况下,优先级高的线程有更大的可能性成功竞争得到CPU时间片,但这又不是绝对的, 有的操作系统对线程优先级并不敏感。 4.线程中断(interrupt) 线程中断时给这个线程一个通知信号,会影响这个线程内部的一个中断标识位 5.join等待其他线程终止 join() 方法,等待其他线程终止,在当前线程中调用一个线程的 join() 方法,则当 前线程转为阻塞状态,回到另一个线程结束,当前线程再由阻塞状态变为就绪状态,等待 cpu 的宠幸. 6.线程唤醒(notify) Object类中的notify()方法,唤醒在此对象监视器上等待的单个线程,如果所有线程都在此对象上等待,则会选择唤醒其中一个线程,选择是任意的,并在对实现做出决定时发生,线程通过调用其中一个wait()方法,在对象的监视器上等待,直到当前的线程放弃此对象上的锁定,才能继续执行被唤醒的线程,被唤醒的线程将以常规方式与在该对象上主动同步的其他所有线程进行竞争。
最大的不同是在等待时wait会释放锁,而sleep一直持有锁。wait通常被用于线程间交互,sleep通常被用于暂停执行。
同步锁就是保证线程互斥,就是指并发执行的多个线程 死锁就是多个线程同时被阻塞,他们中的一个或全部都在等待某个资源被释放
乐观锁:总是假设最好的情况,每次去哪数据的时候都人为别人不会修改,所以不会上锁 悲观锁:总是假设最坏的情况每次去拿数据的时候都认为别人会修改,所以在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁。