Java线程如何才能管理好自己的“小弟”

开发 后端
Java线程在我们的使用中需要注意很多分支的应用,其实这才是Java这门语言的真谛。下面我们就看看如何才能使用好Java线程的相关支线。

Java线程需要大家学习知识有很多,我们在不断学习的过程中就会体会到Java线程中繁多的分支,下面我们就来看看几个具有代表性的分支,希望大家有所收获。

使当前线程(即调用该方法的Java线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁。也就是如果有Synchronized同步块,其他线程仍然不同访问共享数据。注意该方法要捕获异常。#t#

比如有两个线程同时执行(没有Synchronized),一个Java线程优先级为MAX_PRIORITY,另一个为MIN_PRIORITY,如果没有Sleep()方法,只有高优先级的线程执行完成后,低优先级的线程才能执行;但当高优先级的线程sleep(5000)后,低优先级就有机会执行了。

总之,sleep()可以使低优先级的Java线程得到执行的机会,当然也可以让同优先级、高优先级的线程有执行的机会。

join()

join()方法使调用该方法的线程在此之前执行完毕,也就是等待调用该方法的线程执行完毕后再往下继续执行。注意该方法也要捕获异常。

yield()

它与sleep()类似,只是不能由用户指定暂停多长时间,并且yield()方法只能让同优先级的Java线程有执行的机会。

wait()和notify()、notifyAll()

这三个方法用于协调多个Java线程对共享数据的存取,所以必须在Synchronized语句块内使用这三个方法。前面说过Synchronized这个关键字用于保护共享数据,阻止其他线程对共享数据的存取。但是这样程序的流程就很不灵活了,如何才能在当前线程还没退出Synchronized数据块时让其他线程也有机会访问共享数据呢?此时就用这三个方法来灵活控制。

wait()方法使当前线程暂停执行并释放对象锁标志,让其他线程可以进入Synchronized数据块,当前线程被放入对象等待池中。当调用 notify()方法后,将从对象的等待池中移走一个任意的线程并放到锁标志等待池中,只有锁标志等待池中的Java线程能够获取锁标志;如果锁标志等待池中没有线程,则notify()不起作用。

notifyAll()则从对象等待池中移走所有等待那个对象的Java线程并放到锁标志等待池中。

责任编辑:张浩 来源: TT网络
相关推荐

2010-03-16 19:08:03

Java线程同步

2019-08-19 08:01:50

Flink数据管理内存

2010-03-15 16:56:16

Java线程池

2010-03-16 14:32:51

Java系统线程组

2019-12-05 12:00:18

人工智能AI

2012-07-30 09:35:10

项目管理

2014-02-11 11:22:00

并购管理

2010-03-16 17:00:02

Java多线程支持

2010-03-15 19:21:37

Java多线程

2011-03-24 16:01:30

数据库管理

2010-03-17 17:37:17

Java线程返回值

2011-11-18 09:16:20

团队管理

2011-03-03 13:17:43

Oracle数据库

2010-03-18 09:22:31

Java多线程递归

2009-01-02 22:38:48

2020-02-24 11:11:10

IT企业技术

2021-03-02 15:31:37

程序员技能开发者

2020-07-02 07:00:00

API接口网关

2015-04-27 09:33:02

2010-12-01 11:21:13

云环境出口管制数据
点赞
收藏

51CTO技术栈公众号