- 浏览: 48952 次
- 性别:
- 来自: 常州
-
最新评论
-
yi_17328214:
:idea:
js实现图片下拉列表 -
yi_17328214:
<form name="myform" ...
js实现图片下拉列表 -
seven_cuit:
今天阿里巴巴笔试就问了这个问题,竟然漏了枚举
JDK1.5新特性简介
synchronized 关键字,代表这个方法加锁,相当于不管哪一个线程A每次运行到这个法时,都要检查有没有其它正在用这个方法的线程B(或者C D等),有的话要等正在使用这个方法的线程B(或者C D)运行完这个方法后再运行此线程A,没有的话,直接运行 它包括两种用法:synchronized 方法和 synchronized 块。
1. synchronized 方法:通过在方法声明中加入 synchronized关键字来声明 synchronized 方法。如:
public synchronized void accessVal(int newVal);
synchronized 方法控制对类成员变量的访问:每个类实例对应一把锁,每个 synchronized 方法都必须获得调用该方法的类实例的锁方能执行,否则所属线程阻塞,方法一旦执行,就独占该锁,直到从该方法返回时才将锁释放,此后被阻塞的线程方能获得该锁,重新进入可执行状态。这种机制确保了同一时刻对于每一个类实例,其所有声明为 synchronized 的成员函数中至多只有一个处于可执行状态(因为至多只有一个能够获得该类实例对应的锁),从而有效避免了类成员变量的访问冲突(只要所有可能访问类成员变量的方法均被声明为 synchronized)。
在 Java 中,不光是类实例,每一个类也对应一把锁,这样我们也可将类的静态成员函数声明为 synchronized ,以控制其对类的静态成员变量的访问。
synchronized 方法的缺陷:若将一个大的方法声明为synchronized 将会大大影响效率,典型地,若将线程类的方法 run() 声明为 synchronized ,由于在线程的整个生命期内它一直在运行,因此将导致它对本类任何 synchronized 方法的调用都永远不会成功。当然我们可以通过将访问类成员变量的代码放到专门的方法中,将其声明为 synchronized ,并在主方法中调用来解决这一问题,但是 Java 为我们提供了更好的解决办法,那就是 synchronized 块。
2. synchronized 块:通过 synchronized关键字来声明synchronized 块。语法如下:
synchronized(syncObject) {
//允许访问控制的代码
}
synchronized 块是这样一个代码块,其中的代码必须获得对象 syncObject (如前所述,可以是类实例或类)的锁方能执行,具体机制同前所述。由于可以针对任意代码块,且可任意指定上锁的对象,故灵活性较高。
对synchronized(this)的一些理解
一、当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。
二、然而,当一个线程访问object的一个synchronized(this)同步代码块时,另一个线程仍然可以访问该object中的非synchronized(this)同步代码块。
三、尤其关键的是,当一个线程访问object的一个synchronized(this)同步代码块时,其他线程对object中所有其它synchronized(this)同步代码块的访问将被阻塞。
四、第三个例子同样适用其它同步代码块。也就是说,当一个线程访问object的一个synchronized(this)同步代码块时,它就获得了这个object的对象锁。结果,其它线程对该object对象所有同步代码部分的访问都被暂时阻塞。
五、以上规则对其它对象锁同样适用
原文地址 http://baike.baidu.com/view/1207212.html?fromTaglist
发表评论
-
zt-Java异常处理机制的详细讲解和使用技巧
2010-08-07 14:18 7551. 异常机制 1.1 异 ... -
可重启线程及线程池类的设计-zt
2010-08-03 13:59 1635了解JAVA多线程编程的人都知道,要产生一个线程有两种方 ... -
junit 基本教程
2010-07-22 11:35 1017Eclipse中配置junit 在要使用JUNIT的p ... -
zt-ssh优缺点分析
2010-06-18 14:20 839字号:大 中 小 Struts跟Tomcat、Turb ... -
MySQL+Hibernate下连接空闲8小时自动断开问题解决方案
2010-06-18 13:46 1395Hibernate使用C3P0的连接池 ... -
ZT-c3p0的配置解释
2010-06-18 10:49 1192找到了一个关于c3p0的配置 <c3p0-confi ... -
JDK和Tomcat环境变量配置
2010-04-24 12:31 806JDK环境变量配置: 如果你的JDK安装在C盘里 ... -
ZT-JDK中的URLConnection使用总结
2010-01-05 13:50 753针对JDK中的URLConnection连接Servlet的问 ... -
怎样用Java来获取真实的IP地址
2010-01-03 16:23 1367摘录自:http://www.blogjava.net/wan ... -
tomcat内存溢出总结(转)
2009-12-22 16:51 669在生产环境中tomcat内存设置不好很容易出现内存溢出。造成内 ... -
get/post时中文乱码问题的解决办法
2009-11-21 13:13 1792form有2中方法把数据提 ... -
基于表单的文件上传
2009-11-09 11:34 17891. 基于表单 ... -
struts2+spring简单配置
2009-11-04 09:35 7851,修改web.xml <!-- 配置spring 开始 ... -
java中的内存分配机制
2009-10-24 12:28 779Java把内存划分成两种:一种是栈内存,一种是堆内存。 在函 ... -
java 中参数的传递
2009-10-23 17:46 709public static void main(Str ... -
BEA WebLogic Server® 9.2 中文帮助网站
2009-10-10 15:48 747http://edocs.weblogicfans.net/w ... -
JRE和JDK的区别浅析
2009-09-30 14:43 820JRE和JDK的含义是什么呢 ... -
Hibernate 调用JDBC执行存储过程
2009-09-28 11:04 1388public boolean procMemberInfo(i ... -
SPRING中属性SCOPE的prototype是什么意思
2009-09-28 09:50 5579默认情况下,从bean工厂所取得的实例为Singleton(b ... -
Spring有四种Bean封装机制
2009-09-28 09:25 1204Spring有四种Bean封装机制:Bean Wrapper机 ...
相关推荐
"Java 多线程与并发(4-26)-关键字- synchronized详解" Java 多线程与并发中的 synchronized 关键字是实现同步块的互斥访问和线程的阻塞及唤醒等工作的重要工具。下面将对 synchronized 关键字进行详细分析。 ...
Java并发编程---synchronized关键
本文将探讨Synchronized关键字在解决并发控制中的作用及其使用方式。 首先,让我们回顾一下问题的背景:在给出的示例代码中,创建了10个线程,每个线程都对共享变量`count`进行10000000次的累加操作。理论上,最终...
Java 线程同步机制中 synchronized 关键字的理解 Java 的线程同步机制是为了解决多个线程共享同一片存储空间所带来的访问冲突问题。其中,synchronized 关键字是 Java 语言中解决这种冲突的重要机制。 ...
Java中的`synchronized`关键字是多线程编程中的一个重要概念,用于控制并发访问共享资源时的同步机制。在Java中,当多个线程试图同时访问和修改同一块代码或数据时,可能会导致数据不一致的问题。为了解决这个问题,...
java多线程中synchronized关键字的用法 解压密码 www.jiangyea.com
Java提供了多种机制来处理并发问题,其中synchronized关键字是最基本也是最常用的同步手段之一。本文将深入探讨synchronized关键字的工作原理、使用方式以及在实际编程中的应用。 synchronized关键字是Java中实现...
Java 中的 synchronized 关键字与线程平安问题 在 Java 中,synchronized 关键字是一个非常重要的概念,它用于解决线程同步问题。但是,很多开发者对 synchronized 关键字的理解并不够深入,本文将通过实例解析 ...
### synchronized关键字的深入解析 #### 一、synchronized关键字的重要性 `synchronized`关键字在Java语言中扮演着极其重要的角色,它是实现线程安全的核心手段之一。通过`synchronized`关键字,开发人员可以在多...
5-4JVM内置锁synchronized关键字详解.mp4
本文深入探讨了Java中用于解决并发编程中线程安全问题的synchronized关键字。文章首先讨论了多线程编程中临界资源的概念,包括对象、变量、文件等,以及同步机制的必要性。重点解析了synchronized的工作原理,包括其...
Java同步机制的核心是synchronized关键字,它确保了在多线程环境中对共享资源的安全访问。synchronized通过锁定对象的monitor(监视器锁)来控制对共享资源的并发访问,保证在同一时刻只有一个线程能执行特定的代码...
Java 并发编程 Synchronized 关键字实现原理 Synchronized 关键字是 Java 并发编程中最基本的同步机制,它可以保证线程安全,包括原子性、可见性和有序性。Synchronized 关键字可以修饰方法或代码块,使得在同一...
### Synchronized关键字在Java中的应用 #### 概述 `synchronized`是Java语言中的一个关键字,主要用于实现线程同步,防止多个线程同时访问共享资源而导致的数据不一致问题。通过`synchronized`关键字,开发者可以...
### Lock接口与synchronized关键字详解 #### 一、概述 在Java并发编程中,Lock接口与synchronized关键字都是实现同步的重要工具。它们虽然都用于控制多线程对共享资源的访问,但在使用方式、功能特性及灵活性方面...
在Java编程语言中,`synchronized`关键字是一个至关重要的概念,尤其在多线程环境下,它用于控制对共享资源的并发访问,确保线程安全。本教程将深入讲解`synchronized`关键字及其在Java多线程中的应用。 一、...
《深入理解Java中的synchronized关键字》 在Java编程语言中,`synchronized`关键字是用于实现线程同步的重要工具,它的本质在于确保多线程环境下的数据一致性与安全性。通过`synchronized`,我们可以控制对共享资源...
44. **synchronized** - 用于同步代码块或方法的关键字,确保线程安全。 45. **this** - 用于引用当前对象的关键字。 46. **throw** - 用于抛出异常的关键字。 47. **throws** - 用于声明方法可能抛出的...
线程安全,使用synchronized关键字
在 Java 中,同步机制是通过 synchronized 关键字实现的。synchronized 可以用于方法或代码块,以确保在同一时间只有一个线程可以访问该方法或代码块。这样可以防止多个线程同时访问共享资源,避免数据不一致和 race...