java 多线程相关方法总结(wait,notify,sleep,yield,join,interrupt,isInterrupted ,synchronized 代码块和方法)
java 中 object 对象的隐藏属性——monitor 和 wait set.
java中 任何一个对象 都有以上两个涉及到 多线程并发 方面的隐藏属性。监视器 和 等待队列。
有些方法执行时,需要拥有对象的锁。
wait,notify 这类方法执行时,必须拥有对象的锁。
因为他们涉及到 释放锁的操作。
获取对象锁的方法————————synchronized 代码块和方法
synchronized 代码块 :锁对象自己设置。
synchronized方法 : 实例方法 ————锁对象是实例。(Thread.join()使用的所对象 就是 thread objcet)
静态方法————所对象是 类实例。
wait方法, 当前线程暂停执行, 释放掉 其获取的对象的 monitor.并将当前线程插入到 waitset 等待队列中,由于需要释放锁。所以该方法执行时,必须先拥有
锁,也就是 该方法必须在synchronized 代码块和方法 中进行调用。
notify. 当前线程 唤醒 对象等待线程中的一个 线程 继续执行。当然 改方法不会暂停执行,会一直执行完,然后再释放自己获得的锁。(如果不释放锁,唤醒的线程 也无法继续执行,因为唤醒线程必须在同步块或方法中执行。)该方法必须在synchronized 代码块和方法 中进行调用。
notify 和wait ,可以进行线程间的通信,也可以用来实现一些 线程池机制。
sleep: sleep 是 当前线程睡一段时间,放弃当前执行权限,cpu会调度其他线程执行,如果超过设定的时间,该线程会自动醒来,从新参与cpu调度。不涉及锁。
yield: yield跟sleep方法类似,区别是yield不设置时间,只是放弃当前执行权限,立刻从新参与cpu的调度,很可能立刻又从新获取了执行机会。
join: join是 强行让当前线程等待,执行join进来的线程。直到join进来的线程执行完毕,或者是经执行时间已经超过设置的时间,在继续当前线程的执行。
join 是 利用 wait() 来执行逻辑的。 同步的对象是 thread object. jvm 会在 thread 的run 运行完后,设置 thread object.inAlive() 为false.
同时 会调用 thread Object.notify(). 这也就是 为什么 ,子线程运行完后, join会自动返回的原因。
interrupt: 该方法 设置 线程的interrupt flag 为true. wait,或 sleep方法会检查该flag. 如果为true.这类方法会抛出 InterruptedException
如何 检查 该flag? Thread.isInterrupted ()返回当前线程的 interrupt flag. 并将该flag 置为 false.
new Thread().isInterrupted() 返回new Thread()的 interrupt flag. 不会重置flag .
方法所在的类
wait(),notify() 在 java.lang.Object
其他在 java.lang.Thread
实例方法(wait(),notify(),join(),interrupt(),isInterrupted) 静态方法(sleep,yield,isInterrupted)
- 浏览: 62973 次
- 性别:
- 来自: 杭州
最新评论
-
xiyan:
很不错。嘿嘿
draggable.js源码分析 -
yuanhongb:
块级元素不会变成行内元素
css -float属性 -
绿生2009:
“最好下一番功夫在ec-262-3上”,问下,这个ec-262 ...
easyloader.js源码阅读
相关推荐
线程中常见的方法有`sleep`、`interrupt`、`isInterrupted`、`interrupted`、`park`、`yield`、`join`、`wait`和`notify`。`sleep`可以让线程进入等待状态,但不会释放锁。`interrupt`用于中断线程,尤其能打断`...
而`wait()`是`Object`类的方法,它让线程等待,放弃对象锁,直到收到`notify()`或`notifyAll()`信号。 10. **同步代码块修饰符**: - `synchronized`关键字用于修饰同步代码块或同步方法,确保同一时刻仅有一个...
而中断是线程间的通信方式,Thread类提供了interrupt()和isInterrupted()方法来中断和检查线程的中断状态。 五、死锁与同步 多线程编程中常见的问题还有死锁,即两个或更多线程相互等待对方释放资源,导致它们都...
这些方法作用于对象的监视器,wait()方法使线程暂停执行并释放对象锁,notify()和notifyAll()方法唤醒等待该对象锁的线程。 8. 多线程的创建和执行: 可以通过多种方式创建和执行线程,包括直接继承Thread类或实现...
- `sleep()`, `join()`, `yield()`:`sleep()`方法让当前线程暂停指定时间;`join()`方法等待另一个线程完成;`yield()`方法让当前线程放弃CPU,让其他线程有机会运行。 - `wait()`, `notify()`, `notifyAll()`:...
- **方法**: `sleep()`、`join()`、`yield()`、`wait()`、`notify()` / `notifyAll()` - **功能**: - `sleep()`: 使当前线程暂停指定的时间。 - `join()`: 当前线程等待另一个线程结束。 - `yield()`: 让出CPU给...
本文将深入探讨Java中线程的一些关键方法,包括wait、notify、notifyAll、sleep、join、yield以及中断操作。 1. **wait()**:此方法将当前线程置于WAITING状态,意味着线程将放弃当前持有的锁并进入等待队列,直到...
- 使用`interrupt()`方法中断线程,检查线程是否被中断可以使用`isInterrupted()`方法。 4. **线程安全与同步机制** - **题1**:解释线程安全问题。 - 当多个线程访问同一资源时,如果没有正确的同步机制,可能...
Java提供了几种方法来控制线程的执行,如sleep(), join(), yield(), interrupt()等。sleep()方法使当前线程进入睡眠状态;join()让当前线程等待指定线程结束后再继续执行;yield()则让当前线程暂停,给其他线程执行...
- **wait()** 和 **notify()** / **notifyAll()** 方法:在线程间传递控制权,用于实现生产者-消费者模型等。 - **BlockingQueue**:线程安全的数据结构,用于在线程间高效传递数据。 通过理解并熟练掌握这些Java...
3. 线程中断:通过Thread对象的interrupt()方法发送中断请求,线程内部可以通过isInterrupted()或interrupted()方法检查并响应中断。 4. 线程礼让:通过Thread.yield()方法让当前线程暂停,但不会释放CPU,而是让...
2. **wait(), notify(), notifyAll()**:这些方法在`Object`类中,用于线程间的通信。`wait()`会让当前线程等待,`notify()`唤醒一个等待的线程,`notifyAll()`唤醒所有等待的线程。 在实际应用中,我们还可以使用`...
7. `Thread.interrupt()`和`isInterrupted()`:用于中断和检测线程是否被中断。 8. `Lock`和`Condition`:Java并发包`java.util.concurrent.locks`提供了更灵活的锁和条件对象,比如`ReentrantLock`和`Semaphore`。 ...
- **interrupt()、isInterrupted()、Interrupted()**:中断线程,检查线程是否被中断,以及处理中断标志。 理解这些知识点对于理解和解决多线程问题至关重要,能够帮助开发者编写出更高效、更安全的并发程序。在...
- interrupt()方法可以设置线程的中断状态,isInterrupted()可以检查中断状态。 - 中断线程时可能会抛出InterruptedException,线程应当处理或传递这个异常。 8. **线程状态控制** - Thread.sleep()使当前线程...
- **等待-通知机制**:使用`wait()`和`notify()`方法来协调线程间的同步操作。 #### 八、定时器(Timer) - **定时器**:提供了一种机制来安排任务在未来某个时刻或按照固定间隔重复执行。 - 可以通过`Timer`类创建...
`interrupt()`方法用于中断线程,但不会立即停止线程,而是设置中断标志,线程内部可通过检查`isInterrupted()`或`interrupted()`方法来响应中断。 线程的联合是指线程之间的协作,例如,一个线程可能需要等待另一...
例如,当一个线程需要等待其他线程释放资源时,可以调用`wait()`方法,而释放资源的线程则调用`notify()`或`notifyAll()`来唤醒等待的线程。 总的来说,多线程编程涉及线程的创建、控制、同步和通信。理解这些概念...
9. 线程的静态方法,如`Thread.sleep()`,`Thread.join()`,`Thread.yield()`等,这些方法提供了一种程序控制线程暂停、等待和让步的方式。 10. Java线程池的使用,虽然具体实现未在文档中直接体现,但它是多线程...
- **锁对象**:每个对象都有一个内置锁,通过`wait()`、`notify()`和`notifyAll()`方法进行线程通信。 - **死锁**:多个线程相互等待对方释放资源导致的僵局。 - **线程安全**:多个线程访问时,数据一致性不会...