java多线程学习——(3)认识yield,join,sleep方法
来源:互联网 发布:nba2k15安东尼捏脸数据 编辑:程序博客网 时间:2024/06/05 00:10
sleep:
sleep()方法是Thread类的一个静态方法,其作用是使当前线程暂停执行一段时间(可自定义暂停时长),让其他线程有机会执行,当调用Thread.sleep()方法后,若有同步代码块(synchronized)该线程不会释放对象锁(排他锁),其他线程无法访问共享数据。
demo:public class SleepTest { public static void main(String[] args) throws Exception { TestThread r1=new TestThread(); Thread t1=new Thread(r1); Thread t2=new Thread(r1); t1.start(); t2.start(); }}class TestThread implements Runnable{ public Object object=new Object(); @Override public void run() { synchronized(object){ System.out.println("Thread is running......"); try { Thread.sleep(3000); System.out.println("Thread end"); } catch (InterruptedException e) { e.printStackTrace(); } } }}结果:Thread is running......Thread endThread is running......Thread end仅当第一个线程执行3s完成之后,第二个线程才会开始执行当去掉同步块之后:public void run() { //synchronized(object){ System.out.println("Thread is running......"); try { Thread.sleep(3000); System.out.println("Thread end"); } catch (InterruptedException e) { e.printStackTrace(); } } //}其结果为:Thread is running......Thread is running......Thread endThread end两个线程几乎同时完成执行
yield:
该方法与sleep()类似,只是不能由用户指定暂停多长时间,并且yield()方法只能让同优先级的线程有执行的机会。线程执行sleep()方法后转入阻塞(blocked)状态,而执行yield()方法后转入就绪(ready)状态。
join:
thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程。
比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B。
源码:/** * Waits at most <code>millis</code> milliseconds for this thread to * die. A timeout of <code>0</code> means to wait forever. */ public final synchronized void join(long millis) throws InterruptedException { long base = System.currentTimeMillis(); long now = 0; if (millis < 0) { throw new IllegalArgumentException("timeout value is negative"); } if (millis == 0) { while (isAlive()) { wait(0); } } else { while (isAlive()) { long delay = millis - now; if (delay <= 0) { break; } wait(delay); now = System.currentTimeMillis() - base; } } }Join方法实现是通过wait(小提示:Object 提供的方法)。 当main线程调用t.join时候,main线程会获得线程对象t的锁(wait 意味着拿到该对象的锁),调用该对象的wait(等待时间),直到该对象唤醒main线程 ,比如退出后。这就意味着main 线程调用t.join时,必须能够拿到线程t对象的锁。join方法的具体理解可参照该博客:http://blog.csdn.net/FG2006/article/details/6393768
阅读全文
1 0
- java多线程学习——(3)认识yield,join,sleep方法
- Java多线程:(三)一些方法:start(),sleep(),yield(),join()
- JAVA多线程之——wait/yield/sleep/join方法的区别
- Java——线程sleep()join()yield()方法
- java 多线程 sleep() wait() yield() join()方法解析
- Java多线程-(5)线程的优先级、sleep()、yield()、join()
- Java多线程-线程状态、sleep()、yield()、join()
- java notify()、 notifyAll()、 wait()、sleep()、yield()、join()方法学习
- java多线程学习笔记——yield()、wait()、sleep()等方法
- Java多线程初探——yield()方法与join()方法
- 【多线程】——join、yield、wait、sleep的区别
- Sleep/join/yield方法
- JAVA中sleep()、wait()、yield()、join()方法
- 黑马程序员——Java多线程—join、sleep、yield、后台线程、线程优先级
- java 线程 --- join,sleep,yield 基础学习
- Java 多线程学习 sleep()和yield()方法的区别
- JavaSE_50th_线程——sleep、join、yield方法
- 【java并发】基础(3)--sleep、join、yield
- Python学习之旅第一课--安装各种模块包
- 根文件系统分区制作
- zookeeper的日常运维
- 5个人分13个苹果类似的算法问题
- 试验3
- java多线程学习——(3)认识yield,join,sleep方法
- Websphere Application Server (WAS) 中应用的哪一个 web.xml 在起作用
- spring在向后台传数据时,可以自动将字符串转化为数组
- if语句之监控
- 自定义view圆形图片
- 单调队列详解
- js 数组筛选
- Django忘记管理员用户名密码
- 架构师必看: 大型网站技术架构 -- 架构模式