Java多线程同步机制的深入探讨

开发 后端
Java多线程是很多程序员都在使用的一个语言,当在进行线程同步的时候会遇到多多少少的问题,这时候不要慌张,问题总会解决的。

在很多程序员的脑海中Java多线程都会占据一定的位置,众所周知,在Java多线程编程中,一个非常重要的方面就是线程的同步问题。关于线程的同步,一般有以下解决方法:

1. 在需要同步的方法的方法签名中加入synchronized关键字。

2. 使用synchronized块对需要进行同步的代码段进行同步

3. 使用JDK 5中提供的java.util.concurrent.lock包中的Lock对象。

另外,为了解决多个线程对同一变量进行访问时可能发生的安全性问题,我们不仅可以采用同步机制,更可以通过JDK 1.2中加入的ThreadLocal来保证更好的并发性。

本篇中,将详细的讨论Java多线程同步机制,并对ThreadLocal做出探讨。

线程的先来后到

我们来举一个Dirty的例子:某餐厅的卫生间很小,几乎只能容纳一个人如厕。为了保证不受干扰,如厕的人进入卫生间,就要锁上房门。我们可以把卫生间想象成是共享的资源,而众多需要如厕的人可以被视作多个线程。假如卫生间当前有人占用,那么其他人必须等待,直到这个人如厕完毕,打开房门走出来为止。这就好比多个线程共享一个资源的时候,是一定要分出先来后到的。#t#

有人说:那如果我没有这道门会怎样呢?让两个线程相互竞争,谁抢先了,谁就可以先干活,这样多好阿?但是我们知道:如果厕所没有门的话,如厕的人一起涌向厕所,那么必然会发生争执,正常的如厕步骤就会被打乱,很有可能会发生意想不到的结果,例如某些人可能只好被迫在不正确的地方施肥……

正是因为有这道门,任何一个单独进入如厕的人都可以顺利的完成他们的如厕过程,而不会被干扰,甚至发生以外的结果。这就是说,如厕的时候要讲究先来后到。

那么在Java多线程程序当中,当多个线程竞争同一个资源的时候,如何能够保证他们不会产生“打架”的情况呢?有人说是使用同步机制。没错,像上面这个例子,就是典型的同步案例,一旦***位开始如厕,则第二位必须等待***位结束,才能开始他的如厕过程。一个线程,一旦进入某一过程,必须等待正常的返回,并退出这一过程,下一个线程才能开始这个过程。这里,最关键的就是卫生间的门。其实,卫生间的门担任的是资源锁的角色,只要如厕的人锁上门,就相当于获得了这个锁,而当他打开锁出来以后,就相当于释放了这个锁。
 

责任编辑:张浩 来源: 互联网
相关推荐

2024-07-05 08:32:36

2024-11-05 16:29:57

2010-11-22 14:18:32

MySQL锁机制

2024-06-28 08:45:58

2011-11-23 10:09:19

Java线程机制

2009-12-10 15:02:07

OSPF动态路由协议

2023-11-22 13:13:54

多线程死锁

2024-07-08 12:51:05

2010-03-01 17:57:11

WCF缓存机制

2019-05-27 14:40:43

Java同步机制多线程编程

2010-01-21 11:27:30

linux多线程机制线程同步

2011-02-25 09:23:00

Java类加载器

2015-09-02 08:57:56

JavaHashMap工作原理

2010-03-17 15:54:42

Java线程控制权

2021-08-12 15:45:23

Pythonimport模块

2009-12-23 16:13:00

WPF Attache

2010-03-31 14:58:03

云计算

2010-07-21 09:38:15

PHP缓存技术

2009-06-16 10:51:14

Java源码

2009-12-07 16:07:03

PHP类的继承
点赞
收藏

51CTO技术栈公众号