黑马程序员技术交流社区

标题: 【上海校区】JAVA中的基本线程操作(上) [打印本页]

作者: wuqiong    时间: 2018-6-5 10:02
标题: 【上海校区】JAVA中的基本线程操作(上)
本帖最后由 wuqiong 于 2018-6-7 16:24 编辑

1、JAVA中线程的状态
1-1、#对象锁

请一定注意wait(time)的用法。很多初学者(包括我本人在很长一段时间)的理解都是:‘等待一段时间time,然后该线程激活继续工作’;但是如果您按照上文的描述,就会发现这样的理解是有问题的。实际上time更准确的含义应该是:到时检查。而整个wait(time)更准确的理解应该是:释放这个线程独占的X对象的锁芯(独占权),以便其它可以抢占‘锁芯’(独占权)的线程能够进行抢占,但是本线程继续持有X对象的锁的钥匙,等待time的时间后,重新参与‘锁芯’抢占(不一定能够抢占得到)。

1-2、对象锁的工作过程

下图表示了线程中,对象锁的工作过程:


我们以一个实际代码例子来看看所描述的锁的工作过程:

代码很简单,应该不需要做过多说明吧:创建了两个线程threadA和threadB。两个线程的执行方法中都需要对ThreadLock.WAIT_OBJECT这个Object进行对象锁状态检查。下面我们通过eclipse的调试状态看看线程的执行过程:

1-3、synchronized可标注的位置

在JAVA中synchronized关键字可以加载很多位置。您可以在一个方法定义上加synchronized关键字、也可以在方法体中加synchronized关键字、还可以在static块中加synchronized关键字。如下的代码都是正确的:

但是不同位置的synchronized的关键字,代表的含义是不一样的。synchronized(){}这个写法,开发人员可以指定需要检查的对象锁。但是当synchronized加载在方法上时,有的读者就感觉有点混淆了。这里详细说明一下:

(接下文)



作者: 歪果仁    时间: 2018-6-7 15:55
加油加油
作者: 魔都黑马少年梦    时间: 2018-6-7 16:02
666666




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2