本文最后更新于48 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com
- Volatile:当两个线程共同使用一个普通共享变量时,线程A对变量进行了修改,Volatile可以保证这个修改一定能被线程B读到
- Synchrnized:Java提供的一个关键字,能确保被修饰的方法或者同步块同一时间只能有一个线程可以处于方法或者同步块中,可以保证可见性和排他性。
- wait/notify:Java提供的“等待/通知”机制进行线程之间的协作运行。
- Thread.join():线程A调用线程B.join(),表示线程A需要等待线程B完全执行完成,才会从B.join()处返回继续执行,调用join方法后,线程A会处于等待(WAITING)或者超时等待(TIMED_WAITING)状态。
Java等待通知机制详解
Java中的等待通知方法被定义再了Object类上。线程A调用对象Object的wait()方法进入等待状态或者超时等待状态,线程B调用对象Object的notify或者notifyAll方法时,线程A会从wait方法返回,执行后续操作。
Java中等待和通知方法有一下五种:
- wait():线程调用该方法进入等待状态,返回需要等待另外线程通知或者被中断。另外注意线程调用wait方法会释放对象的锁(能调用wait方法前提是获取到对象锁)
- wait(long):线程调用之后会进入超时等待状态,多一种返回方式:即使没有通知,也会在等待一定时间(毫秒)后返回
- wait(long,int):超时时间更细,到纳秒级别
- notify:通知一个在对象Object上等待的线程。
- notifyAll:通知在这个对象上等待的所有线程